diff options
author | Erik Paulson <epaulson10@gmail.com> | 2015-01-02 11:34:34 -0800 |
---|---|---|
committer | Erik Paulson <epaulson10@gmail.com> | 2015-01-04 12:23:48 -0800 |
commit | 55f00f44d30d06cf17e86d9a94bd8a42b0b04db1 (patch) | |
tree | f8466df2ee284fdb78467b46a2c606cf5dae2a6f | |
parent | 91b378d349425d0ad435c06fc341de5aa2f7b5c9 (diff) | |
download | rneovim-55f00f44d30d06cf17e86d9a94bd8a42b0b04db1.tar.gz rneovim-55f00f44d30d06cf17e86d9a94bd8a42b0b04db1.tar.bz2 rneovim-55f00f44d30d06cf17e86d9a94bd8a42b0b04db1.zip |
vim-patch:7.4.551
Problem: "ygn" may yank too much. (Fritzophrenic) Issue 295.
Solution: Check the width of the next match. (Christian Brabandt)
https://code.google.com/p/vim/source/detail?r=v7-4-551
-rw-r--r-- | src/nvim/search.c | 22 | ||||
-rw-r--r-- | src/nvim/testdir/test53.in | 7 | ||||
-rw-r--r-- | src/nvim/testdir/test53.ok | 6 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
4 files changed, 31 insertions, 6 deletions
diff --git a/src/nvim/search.c b/src/nvim/search.c index 5158e6cd86..d3946a9b63 100644 --- a/src/nvim/search.c +++ b/src/nvim/search.c @@ -3757,7 +3757,6 @@ current_quote ( /* * Find next search match under cursor, cursor at end. * Used while an operator is pending, and in Visual mode. - * TODO: redo only works when used in operator pending mode */ int current_search ( @@ -3792,7 +3791,7 @@ current_search ( orig_pos = pos = curwin->w_cursor; /* Is the pattern is zero-width? */ - int one_char = is_one_char(spats[last_idx].pat); + int one_char = is_one_char(spats[last_idx].pat, true); if (one_char == -1) { p_ws = old_p_ws; return FAIL; /* pattern not found */ @@ -3840,6 +3839,10 @@ current_search ( int flags = forward ? SEARCH_END : 0; pos_T start_pos = pos; + /* Check again from the current cursor position, + * since the next match might actually be only one char wide */ + one_char = is_one_char(spats[last_idx].pat, false); + /* move to match, except for zero-width matches, in which case, we are * already on the next match */ if (!one_char) @@ -3878,24 +3881,33 @@ current_search ( /* * Check if the pattern is one character or zero-width. + * If move is true, check from the beginning of the buffer, + * else from the current cursor position. * Returns TRUE, FALSE or -1 for failure. */ -static int is_one_char(char_u *pattern) +static int is_one_char(char_u *pattern, bool move) { regmmatch_T regmatch; int nmatched = 0; int result = -1; pos_T pos; int save_called_emsg = called_emsg; + int flag = 0; if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH, SEARCH_KEEP, ®match) == FAIL) return -1; /* move to match */ - clearpos(&pos); + if (move) { + clearpos(&pos); + } else { + pos = curwin->w_cursor; + /* accept a match at the cursor position */ + flag = SEARCH_START; + } if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1, - SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL) { + SEARCH_KEEP + flag, RE_SEARCH, 0, NULL) != FAIL) { /* Zero-width pattern should match somewhere, then we can check if * start and end are in the same position. */ called_emsg = FALSE; diff --git a/src/nvim/testdir/test53.in b/src/nvim/testdir/test53.in index 011c9ae39d..8ca9c9ed29 100644 --- a/src/nvim/testdir/test53.in +++ b/src/nvim/testdir/test53.in @@ -79,6 +79,8 @@ ggdgn. :" test repeating gUgn /^Depp gggUgn. +gg/a:0\@!\zs\d\+ +nygnop :/^start:/,/^end:/wq! test.out ENDTEST @@ -108,6 +110,11 @@ delete first and last chars uniquepattern uniquepattern my very excellent mother just served us nachos for (i=0; i<=10; i++) +a:10 + +a:1 + +a:20 Y text Y diff --git a/src/nvim/testdir/test53.ok b/src/nvim/testdir/test53.ok index d7ffa6bc51..0c0b9ded16 100644 --- a/src/nvim/testdir/test53.ok +++ b/src/nvim/testdir/test53.ok @@ -49,6 +49,12 @@ elete first and last char uniquepattern my very excellent mongoose just served us nachos for (j=0; i<=10; i++) +a:10 + +a:1 +1 + +a:20 text Y diff --git a/src/nvim/version.c b/src/nvim/version.c index c1fe19bb9c..bfae69e2a7 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -187,7 +187,7 @@ static int included_patches[] = { //554, //553, 552, - //551, + 551, //550, 549, //548 NA |