Mercurial > vim
changeset 4069:43c15135926f v7.3.789
updated for version 7.3.789
Problem: "\k" in regexp does not work in other window.
Solution: Use the right buffer. (Yukihiro Nakadaira)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 30 Jan 2013 13:59:37 +0100 |
parents | 70eacf4f099d |
children | 75b0ad7e1118 |
files | src/mbyte.c src/proto/mbyte.pro src/regexp.c src/version.c |
diffstat | 4 files changed, 20 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mbyte.c +++ b/src/mbyte.c @@ -869,11 +869,19 @@ remove_bom(s) mb_get_class(p) char_u *p; { + return mb_get_class_buf(p, curbuf); +} + + int +mb_get_class_buf(p, buf) + char_u *p; + buf_T *buf; +{ if (MB_BYTE2LEN(p[0]) == 1) { if (p[0] == NUL || vim_iswhite(p[0])) return 0; - if (vim_iswordc(p[0])) + if (vim_iswordc_buf(p[0], buf)) return 2; return 1; }
--- a/src/proto/mbyte.pro +++ b/src/proto/mbyte.pro @@ -4,6 +4,7 @@ char_u *mb_init __ARGS((void)); int bomb_size __ARGS((void)); void remove_bom __ARGS((char_u *s)); int mb_get_class __ARGS((char_u *p)); +int mb_get_class_buf __ARGS((char_u *p, buf_T *buf)); int dbcs_class __ARGS((unsigned lead, unsigned trail)); int latin_char2len __ARGS((int c)); int latin_char2bytes __ARGS((int c, char_u *buf));
--- a/src/regexp.c +++ b/src/regexp.c @@ -4013,8 +4013,8 @@ static int reg_prev_class __ARGS((void)) reg_prev_class() { if (reginput > regline) - return mb_get_class(reginput - 1 - - (*mb_head_off)(regline, reginput - 1)); + return mb_get_class_buf(reginput - 1 + - (*mb_head_off)(regline, reginput - 1), reg_buf); return -1; } @@ -4304,7 +4304,7 @@ regmatch(scan) int this_class; /* Get class of current and previous char (if it exists). */ - this_class = mb_get_class(reginput); + this_class = mb_get_class_buf(reginput, reg_buf); if (this_class <= 1) status = RA_NOMATCH; /* not on a word at all */ else if (reg_prev_class() == this_class) @@ -4328,7 +4328,7 @@ regmatch(scan) int this_class, prev_class; /* Get class of current and previous char (if it exists). */ - this_class = mb_get_class(reginput); + this_class = mb_get_class_buf(reginput, reg_buf); prev_class = reg_prev_class(); if (this_class == prev_class || prev_class == 0 || prev_class == 1) @@ -4365,14 +4365,14 @@ regmatch(scan) break; case KWORD: - if (!vim_iswordp(reginput)) + if (!vim_iswordp_buf(reginput, reg_buf)) status = RA_NOMATCH; else ADVANCE_REGINPUT(); break; case SKWORD: - if (VIM_ISDIGIT(*reginput) || !vim_iswordp(reginput)) + if (VIM_ISDIGIT(*reginput) || !vim_iswordp_buf(reginput, reg_buf)) status = RA_NOMATCH; else ADVANCE_REGINPUT(); @@ -5734,7 +5734,8 @@ regrepeat(p, maxcount) case SKWORD + ADD_NL: while (count < maxcount) { - if (vim_iswordp(scan) && (testval || !VIM_ISDIGIT(*scan))) + if (vim_iswordp_buf(scan, reg_buf) + && (testval || !VIM_ISDIGIT(*scan))) { mb_ptr_adv(scan); }