# HG changeset patch # User Bram Moolenaar # Date 1346840205 -7200 # Node ID 29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 # Parent c0ac5ba6624303f459d0b24f5fe98b1269778213 updated for version 7.3.647 Problem: "gnd" doesn't work correctly in Visual mode. Solution: Handle Visual mode differently in "gn". (Christian Brabandt) diff --git a/src/search.c b/src/search.c --- a/src/search.c +++ b/src/search.c @@ -4545,7 +4545,6 @@ current_search(count, forward) int dir; int result; /* result of various function calls */ char_u old_p_ws = p_ws; - int visual_active = FALSE; int flags = 0; pos_T save_VIsual; int zerowidth = FALSE; @@ -4561,11 +4560,6 @@ current_search(count, forward) { orig_pos = curwin->w_cursor; save_VIsual = VIsual; - visual_active = TRUE; - - /* just started visual selection, only one character */ - if (equalpos(VIsual, curwin->w_cursor)) - visual_active = FALSE; pos = curwin->w_cursor; start_pos = VIsual; @@ -4619,7 +4613,7 @@ current_search(count, forward) p_ws = old_p_ws; return FAIL; } - else if (!i && !result && !visual_active) + else if (!i && !result) { if (forward) /* try again from start of buffer */ { @@ -4691,7 +4685,8 @@ is_zerowidth(pattern) regmmatch_T regmatch; int nmatched = 0; int result = -1; - pos_T pos; + pos_T pos; + int save_called_emsg = called_emsg; if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH, SEARCH_KEEP, ®match) == FAIL) @@ -4704,15 +4699,17 @@ is_zerowidth(pattern) { /* Zero-width pattern should match somewhere, then we can check if * start and end are in the same position. */ + called_emsg = FALSE; nmatched = vim_regexec_multi(®match, curwin, curbuf, pos.lnum, (colnr_T)0, NULL); if (!called_emsg) result = (nmatched != 0 - && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum - && regmatch.startpos[0].col == regmatch.endpos[0].col); + && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum + && regmatch.startpos[0].col == regmatch.endpos[0].col); } + called_emsg |= save_called_emsg; vim_free(regmatch.regprog); return result; } diff --git a/src/testdir/test53.in b/src/testdir/test53.in --- a/src/testdir/test53.in +++ b/src/testdir/test53.in @@ -40,7 +40,8 @@ 0gnd /\>\zs 0gnd/^ gnd$h/\zs -gnd +gnd/[u]niquepattern/s +vlgnd :/^start:/,/^end:/wq! test.out ENDTEST @@ -67,4 +68,5 @@ join lines zero width pattern delete first and last chars +uniquepattern uniquepattern end: diff --git a/src/testdir/test53.ok b/src/testdir/test53.ok --- a/src/testdir/test53.ok +++ b/src/testdir/test53.ok @@ -24,4 +24,5 @@ abcdx | | abcdx join lines zerowidth pattern elete first and last char + uniquepattern end: diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -720,6 +720,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 647, +/**/ 646, /**/ 645,