summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2012-09-05 12:16:45 +0200
committerBram Moolenaar <bram@vim.org>2012-09-05 12:16:45 +0200
commit4d1d9199a5a1c84172671fb0a0135f18a9529f10 (patch)
treecf575d74c1e2835b553bc7ceb90b71a4dd4aa585
parent610f7c6d6d2a030a9b470e07d3fa024d0efef940 (diff)
downloadvim-4d1d9199a5a1c84172671fb0a0135f18a9529f10.tar.gz
updated for version 7.3.647v7.3.647v7-3-647
Problem: "gnd" doesn't work correctly in Visual mode. Solution: Handle Visual mode differently in "gn". (Christian Brabandt)
-rw-r--r--src/search.c17
-rw-r--r--src/testdir/test53.in4
-rw-r--r--src/testdir/test53.ok1
-rw-r--r--src/version.c2
4 files changed, 13 insertions, 11 deletions
diff --git a/src/search.c b/src/search.c
index b54b30f9..158cfd8f 100644
--- 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, &regmatch) == 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(&regmatch, 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
index be76b05c..af617c01 100644
--- a/src/testdir/test53.in
+++ b/src/testdir/test53.in
@@ -40,7 +40,8 @@ gnd
/\>\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
index 928caff7..0a2a6f4d 100644
--- 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
index 2f20fa67..922e8654 100644
--- 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,