diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-11-23 21:56:46 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-11-23 21:56:46 +0100 |
commit | c672525b487992306f69ceab093291ba3b8e4246 (patch) | |
tree | 9176ecf650b1c5f0d45f186d95ca4c347b484eb7 | |
parent | 85c3502ef5a4c4b0f5944a89edb731f2289a706c (diff) | |
download | vim-git-c672525b487992306f69ceab093291ba3b8e4246.tar.gz |
patch 8.1.2338: using Visual mark sith :s gives E20 if not setv8.1.2338
Problem: Using Visual mark sith :s gives E20 if not set.
Solution: Ignore errors when handling 'incsearch'. (closes #3837)
-rw-r--r-- | src/ex_getln.c | 21 | ||||
-rw-r--r-- | src/testdir/dumps/Test_incsearch_substitute_14.dump | 9 | ||||
-rw-r--r-- | src/testdir/test_search.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 37 insertions, 8 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c index 7d2efcac4..0a3d9d4da 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -197,6 +197,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, exarg_T ea; pos_T save_cursor; int use_last_pat; + int retval = FALSE; *skiplen = 0; *patlen = ccline.cmdlen; @@ -213,6 +214,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, if (firstc != ':') return FALSE; + ++emsg_off; vim_memset(&ea, 0, sizeof(ea)); ea.line1 = 1; ea.line2 = 1; @@ -224,13 +226,13 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, cmd = skip_range(ea.cmd, NULL); if (vim_strchr((char_u *)"sgvl", *cmd) == NULL) - return FALSE; + goto theend; // Skip over "substitute" to find the pattern separator. for (p = cmd; ASCII_ISALPHA(*p); ++p) ; if (*skipwhite(p) == NUL) - return FALSE; + goto theend; if (STRNCMP(cmd, "substitute", p - cmd) == 0 || STRNCMP(cmd, "smagic", p - cmd) == 0 @@ -248,7 +250,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, while (ASCII_ISALPHA(*(p = skipwhite(p)))) ++p; if (*p == NUL) - return FALSE; + goto theend; } else if (STRNCMP(cmd, "vimgrep", MAX(p - cmd, 3)) == 0 || STRNCMP(cmd, "vimgrepadd", MAX(p - cmd, 8)) == 0 @@ -261,13 +263,13 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, { p++; if (*skipwhite(p) == NUL) - return FALSE; + goto theend; } if (*cmd != 'g') delim_optional = TRUE; } else - return FALSE; + goto theend; p = skipwhite(p); delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++; @@ -276,7 +278,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, use_last_pat = end == p && *end == delim; if (end == p && !use_last_pat) - return FALSE; + goto theend; // Don't do 'hlsearch' highlighting if the pattern matches everything. if (!use_last_pat) @@ -288,7 +290,7 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, empty = empty_pattern(p); *end = c; if (empty) - return FALSE; + goto theend; } // found a non-empty pattern or // @@ -321,7 +323,10 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, } curwin->w_cursor = save_cursor; - return TRUE; + retval = TRUE; +theend: + --emsg_off; + return retval; } static void diff --git a/src/testdir/dumps/Test_incsearch_substitute_14.dump b/src/testdir/dumps/Test_incsearch_substitute_14.dump new file mode 100644 index 000000000..c319856d3 --- /dev/null +++ b/src/testdir/dumps/Test_incsearch_substitute_14.dump @@ -0,0 +1,9 @@ +|a+1&#ffffff0|s+0&&|d|f|a+0&#ffff4012|s+0&#ffffff0|d|f| @61 +|~+0#4040ff13&| @68 +|~| @68 +|[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @38|1|,|1| @11|A|l@1 +|b+0&&|s|d|f|b|s|d|f| @61 +|~+0#4040ff13&| @68 +|[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @38|1|,|1| @11|A|l@1 +|:+0&&|'|<|,|'|>|s|/|a|/|b|/|g> @56 +@70 diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim index 190755a2d..187671305 100644 --- a/src/testdir/test_search.vim +++ b/src/testdir/test_search.vim @@ -983,6 +983,19 @@ func Test_incsearch_substitute_dump() call VerifyScreenDump(buf, 'Test_incsearch_substitute_12', {}) call term_sendkeys(buf, "\<Esc>") call VerifyScreenDump(buf, 'Test_incsearch_substitute_13', {}) + call term_sendkeys(buf, ":%bwipe!\<CR>") + call term_sendkeys(buf, ":only!\<CR>") + + " get :'<,'>s command in history + call term_sendkeys(buf, ":set cmdheight=2\<CR>") + call term_sendkeys(buf, "aasdfasdf\<Esc>") + call term_sendkeys(buf, "V:s/a/b/g\<CR>") + " Using '<,'> does not give E20 + call term_sendkeys(buf, ":new\<CR>") + call term_sendkeys(buf, "aasdfasdf\<Esc>") + call term_sendkeys(buf, ":\<Up>\<Up>") + call VerifyScreenDump(buf, 'Test_incsearch_substitute_14', {}) + call term_sendkeys(buf, "<Esc>") call StopVimInTerminal(buf) call delete('Xis_subst_script') diff --git a/src/version.c b/src/version.c index 996c3c576..67ea6afe8 100644 --- a/src/version.c +++ b/src/version.c @@ -738,6 +738,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2338, +/**/ 2337, /**/ 2336, |