diff options
-rw-r--r-- | runtime/doc/options.txt | 17 | ||||
-rw-r--r-- | runtime/doc/syntax.txt | 5 | ||||
-rw-r--r-- | runtime/doc/vim_diff.txt | 2 | ||||
-rw-r--r-- | src/nvim/ex_cmds.c | 72 | ||||
-rw-r--r-- | src/nvim/ex_getln.c | 2 | ||||
-rw-r--r-- | src/nvim/option.c | 8 | ||||
-rw-r--r-- | src/nvim/option_defs.h | 2 | ||||
-rw-r--r-- | src/nvim/options.lua | 16 | ||||
-rw-r--r-- | src/nvim/syntax.c | 2 | ||||
-rw-r--r-- | test/functional/ui/inccommand_spec.lua (renamed from test/functional/ui/incsubstitute_spec.lua) | 46 |
10 files changed, 86 insertions, 86 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index f41983cf07..79e5ff090f 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -3466,6 +3466,15 @@ A jump table for the options with a short description can be found at |Q_op|. The value is set to 1 when it is not -1 and setting the 'keymap' option to a valid keymap name. + *'inccommand'* *'icm'* +'inccommand' 'icm' string (default "") + global + + "nosplit" : Shows the effects of a command incrementally, as you type. + "split" : Also shows partial off-screen results in a preview window. + + Currently only works for |:substitute|. |hl-Substitute| + *'include'* *'inc'* 'include' 'inc' string (default "^\s*#\s*include") global or local to buffer |global-local| @@ -3526,14 +3535,6 @@ A jump table for the options with a short description can be found at |Q_op|. CTRL-R CTRL-W can be used to add the word at the end of the current match, excluding the characters that were already typed. - *'incsubstitute'* *'ics'* -'incsubstitute' 'ics' string (default "") - global - - If "split" or "nosplit" then |:substitute| updates the buffer - as-you-type. If "split", also show partial off-screen results in - a window. Replacement text is hightlighted with |hl-IncSubstitute|. - *'indentexpr'* *'inde'* 'indentexpr' 'inde' string (default "") local to buffer diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index a942c5de03..a9762a7121 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -4852,8 +4852,9 @@ SignColumn column where |signs| are displayed *hl-IncSearch* IncSearch 'incsearch' highlighting; also used for the text replaced with ":s///c" - *hl-IncSubstitute* -IncSubstitute 'incsubstitute' replacement text + *hl-Substitute* +Substitute |:substitute| replacement text highlighting + *hl-LineNr* LineNr Line number for ":number" and ":#" commands, and when 'number' or 'relativenumber' option is set. diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt index 80db8eefb0..79381183a0 100644 --- a/runtime/doc/vim_diff.txt +++ b/runtime/doc/vim_diff.txt @@ -107,7 +107,7 @@ Some `CTRL-SHIFT-...` key chords are distinguished from `CTRL-...` variants <C-Tab>, <C-S-Tab>, <C-BS>, <C-S-BS>, <C-Enter>, <C-S-Enter> Options: - 'incsubstitute' shows results while typing a |:substitute| command + 'inccommand' shows results while typing a |:substitute| command 'statusline' supports unlimited alignment sections 'tabline' %@Func@foo%X can call any function on mouse-click diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 3dc190ddbf..66c4089ec7 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -87,7 +87,7 @@ typedef struct { SubIgnoreType do_ic; ///< ignore case flag } subflags_T; -/// Lines matched during 'incsubstitute'. +/// Lines matched during :substitute. typedef struct { linenr_T lnum; long nmatch; @@ -3110,7 +3110,7 @@ static char_u *sub_parse_flags(char_u *cmd, subflags_T *subflags, /// /// The usual escapes are supported as described in the regexp docs. /// -/// @return buffer used for 'incsubstitute' +/// @return buffer used for 'inccommand' preview buf_T *do_sub(exarg_T *eap) { long i = 0; @@ -3627,8 +3627,8 @@ buf_T *do_sub(exarg_T *eap) * use "\=col("."). */ curwin->w_cursor.col = regmatch.startpos[0].col; - // 3. Substitute the string. During 'incsubstitute' only do this if - // there is a replace pattern. + // 3. Substitute the string. During 'inccommand' only do this if there + // is a replace pattern. if (!eap->is_live || has_second_delim) { if (subflags.do_count) { // prevent accidentally changing the buffer by a function @@ -3944,9 +3944,9 @@ skip: subflags.do_all = save_do_all; subflags.do_ask = save_do_ask; - // Show 'incsubstitute' preview if there are matched lines. - buf_T *incsub_buf = NULL; - if (eap->is_live && matched_lines.size != 0 && pat != NULL && *p_ics != NUL) { + // Show 'inccommand' preview if there are matched lines. + buf_T *preview_buf = NULL; + if (eap->is_live && matched_lines.size != 0 && pat != NULL && *p_icm != NUL) { // Place cursor on the first match after the cursor. (If all matches are // above, then do_sub already placed cursor on the last match.) colnr_T cur_col = -1; @@ -3971,10 +3971,9 @@ skip: } } - incsub_buf = incsub_display(pat, sub, eap->line1, eap->line2, - &matched_lines); + preview_buf = show_sub(pat, sub, eap->line1, eap->line2, &matched_lines); - } else if (*p_ics != NUL && eap->is_live) { + } else if (*p_icm != NUL && eap->is_live) { curwin->w_cursor = old_cursor; // don't move the cursor } @@ -3985,7 +3984,7 @@ skip: } kv_destroy(matched_lines); - return incsub_buf; + return preview_buf; } // NOLINT(readability/fn_size) /* @@ -6015,12 +6014,11 @@ void set_context_in_sign_cmd(expand_T *xp, char_u *arg) } } -/// Shows a preview of :substitute (for 'incsubstitute'). -/// With incsubstitute=split, shows a special buffer in a window, draws the -/// screen, then restores the layout. -static buf_T *incsub_display(char_u *pat, char_u *sub, - linenr_T line1, linenr_T line2, - MatchedLineVec *matched_lines) +/// Shows the effects of the current :substitute command being typed +/// ('inccommand'). If inccommand=split, shows a preview window then later +/// restores the layout. +static buf_T *show_sub(char_u *pat, char_u *sub, linenr_T line1, linenr_T line2, + MatchedLineVec *matched_lines) FUNC_ATTR_NONNULL_ALL { static handle_T bufnr = 0; // special buffer, re-used on each visit @@ -6033,27 +6031,27 @@ static buf_T *incsub_display(char_u *pat, char_u *sub, size_t pat_size = mb_string2cells(pat); // We keep a special-purpose buffer around, but don't assume it exists. - buf_T *incsub_buf = bufnr ? buflist_findnr(bufnr) : 0; + buf_T *preview_buf = bufnr ? buflist_findnr(bufnr) : 0; win_size_save(&save_winsizes); // Save current window sizes. cmdmod.tab = 0; // disable :tab modifier - cmdmod.noswapfile = true; // disable swap for 'incsubstitute' buffer + cmdmod.noswapfile = true; // disable swap for preview buffer // disable file info message set_option_value((char_u *)"shm", 0L, (char_u *)"F", 0); bool outside_curline = (line1 != curwin->w_cursor.lnum || line2 != curwin->w_cursor.lnum); - bool split = outside_curline && (*p_ics != 'n') && (sub_size || pat_size); - if (incsub_buf == curbuf) { // Preview buffer cannot preview itself! + bool split = outside_curline && (*p_icm != 'n') && (sub_size || pat_size); + if (preview_buf == curbuf) { // Preview buffer cannot preview itself! split = false; - incsub_buf = NULL; + preview_buf = NULL; } if (split && win_split((int)p_cwh, WSP_BOT) != FAIL) { - buf_open_special(incsub_buf ? bufnr : 0, "[Preview]", "incsub"); + buf_open_special(preview_buf ? bufnr : 0, "[Preview]", "incsub"); buf_clear(); - incsub_buf = curbuf; + preview_buf = curbuf; set_option_value((char_u *)"bh", 0L, (char_u *)"hide", OPT_LOCAL); - bufnr = incsub_buf->handle; + bufnr = preview_buf->handle; curbuf->b_p_bl = false; curbuf->b_p_ma = true; curbuf->b_p_ul = -1; @@ -6070,9 +6068,9 @@ static buf_T *incsub_display(char_u *pat, char_u *sub, size_t old_line_size = 0; size_t line_size; int src_id_highlight = 0; - int hl_id = syn_check_group((char_u *)"IncSubstitute", 13); + int hl_id = syn_check_group((char_u *)"Substitute", 13); - // Dump the lines into the incsub buffer. + // Dump the lines into the preview buffer. for (size_t line = 0; line < matched_lines->size; line++) { MatchedLine mat = matched_lines->items[line]; line_size = mb_string2cells(mat.line) + col_width + 1; @@ -6083,7 +6081,7 @@ static buf_T *incsub_display(char_u *pat, char_u *sub, old_line_size = line_size; } - // put " | lnum|line" into str and append it to the incsubstitute buffer + // put " | lnum|line" into str and append it to the preview buffer snprintf(str, line_size, "|%*ld| %s", col_width - 3, mat.lnum, mat.line); ml_append(line, (char_u *)str, (colnr_T)line_size, false); @@ -6118,17 +6116,17 @@ static buf_T *incsub_display(char_u *pat, char_u *sub, cmdmod = save_cmdmod; - return incsub_buf; + return preview_buf; } /// :substitute command /// -/// If 'incsubstitute' is empty, this just calls do_sub(). -/// If 'incsubstitute' is set, substitutes as-you-type ("live"). -/// If the command is cancelled the changes are removed from undo history. +/// If 'inccommand' is empty this just calls do_sub(). +/// If 'inccommand' is set, shows a "live" preview then removes the changes +/// from undo history. void ex_substitute(exarg_T *eap) { - if (*p_ics == NUL || !eap->is_live) { // 'incsubstitute' is disabled + if (*p_icm == NUL || !eap->is_live) { // 'inccommand' is disabled (void)do_sub(eap); return; } @@ -6138,18 +6136,18 @@ void ex_substitute(exarg_T *eap) int save_changedtick = curbuf->b_changedtick; long save_b_p_ul = curbuf->b_p_ul; curbuf->b_p_ul = LONG_MAX; // make sure we can undo all changes - block_autocmds(); // disable events before incsub opening window/buffer + block_autocmds(); // disable events before show_sub() opens window/buffer emsg_off++; // No error messages for live commands - buf_T *incsub_buf = do_sub(eap); + buf_T *preview_buf = do_sub(eap); if (save_changedtick != curbuf->b_changedtick && !u_undo_and_forget(1)) { abort(); } - if (buf_valid(incsub_buf)) { + if (buf_valid(preview_buf)) { // XXX: Must do this *after* u_undo_and_forget(), why? - close_windows(incsub_buf, false); + close_windows(preview_buf, false); } curbuf->b_changedtick = save_changedtick; curbuf->b_p_ul = save_b_p_ul; diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index dba7a107e2..07b50a8056 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1592,7 +1592,7 @@ static int command_line_changed(CommandLineState *s) redrawcmdline(); s->did_incsearch = true; } else if (s->firstc == ':' - && *p_ics != NUL // 'incsubstitute' is set + && *p_icm != NUL // 'inccommand' is set && cmdline_star == 0 // not typing a password && cmd_is_live(ccline.cmdbuff)) { // process a "live" command diff --git a/src/nvim/option.c b/src/nvim/option.c index 761e4451b9..ca66f84a70 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -288,7 +288,7 @@ static char *(p_fdm_values[]) = { "manual", "expr", "marker", "indent", static char *(p_fcl_values[]) = { "all", NULL }; static char *(p_cot_values[]) = { "menu", "menuone", "longest", "preview", "noinsert", "noselect", NULL }; -static char *(p_ics_values[]) = { "nosplit", "split", NULL }; +static char *(p_icm_values[]) = { "nosplit", "split", NULL }; #ifdef INCLUDE_GENERATED_DECLARATIONS # include "option.c.generated.h" @@ -3111,9 +3111,9 @@ did_set_string_option ( else if (gvarp == &p_cino) { /* TODO: recognize errors */ parse_cino(curbuf); - // incsubstitute - } else if (varp == &p_ics) { - if (check_opt_strings(p_ics, p_ics_values, false) != OK) { + // inccommand + } else if (varp == &p_icm) { + if (check_opt_strings(p_icm, p_icm_values, false) != OK) { errmsg = e_invarg; } // Options that are a list of flags. diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index e0711c7c8f..57ad5f5d1a 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -470,6 +470,7 @@ EXTERN int p_icon; // 'icon' EXTERN char_u *p_iconstring; // 'iconstring' EXTERN int p_ic; // 'ignorecase' EXTERN int p_is; // 'incsearch' +EXTERN char_u *p_icm; // 'inccommand' EXTERN int p_im; // 'insertmode' EXTERN char_u *p_isf; // 'isfname' EXTERN char_u *p_isi; // 'isident' @@ -589,7 +590,6 @@ EXTERN int p_spr; // 'splitright' EXTERN int p_sol; // 'startofline' EXTERN char_u *p_su; // 'suffixes' EXTERN char_u *p_swb; // 'switchbuf' -EXTERN char_u *p_ics; // 'incsubstitute' EXTERN unsigned swb_flags; #ifdef IN_OPTION_C static char *(p_swb_values[]) = diff --git a/src/nvim/options.lua b/src/nvim/options.lua index 359bf3fcee..14707aaa6c 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -1188,6 +1188,14 @@ return { } }, { + full_name='inccommand', abbreviation='icm', + type='string', scope={'global'}, + vi_def=true, + redraw={'everything'}, + varname='p_icm', + defaults={if_true={vi=""}} + }, + { full_name='include', abbreviation='inc', type='string', scope={'global', 'buffer'}, vi_def=true, @@ -1211,14 +1219,6 @@ return { defaults={if_true={vi=false, vim=true}} }, { - full_name='incsubstitute', abbreviation='ics', - type='string', scope={'global'}, - vi_def=true, - redraw={'everything'}, - varname='p_ics', - defaults={if_true={vi=""}} - }, - { full_name='indentexpr', abbreviation='inde', type='string', scope={'buffer'}, vi_def=true, diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c index 68d0e3da0f..e57965ac2c 100644 --- a/src/nvim/syntax.c +++ b/src/nvim/syntax.c @@ -5902,7 +5902,7 @@ static char *highlight_init_both[] = "WildMenu ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black", "default link EndOfBuffer NonText", "default link QuickFixLine Search", - "default link IncSubstitute Search", + "default link Substitute Search", NULL }; diff --git a/test/functional/ui/incsubstitute_spec.lua b/test/functional/ui/inccommand_spec.lua index 4213a2ea93..25ddfdf2a1 100644 --- a/test/functional/ui/incsubstitute_spec.lua +++ b/test/functional/ui/inccommand_spec.lua @@ -19,11 +19,11 @@ local default_text = [[ two lines ]] -local function common_setup(screen, incsub, text) +local function common_setup(screen, inccommand, text) if screen then execute("syntax on") execute("set nohlsearch") - execute("hi IncSubstitute guifg=red guibg=yellow") + execute("hi Substitute guifg=red guibg=yellow") screen:attach() screen:set_default_attr_ids({ [1] = {foreground = Screen.colors.Fuchsia}, @@ -45,14 +45,14 @@ local function common_setup(screen, incsub, text) }) end - execute("set incsubstitute=" .. (incsub and incsub or "")) + execute("set inccommand=" .. (inccommand and inccommand or "")) if text then insert(text) end end -describe("'incsubstitute' preserves", function() +describe(":substitute, 'inccommand' preserves", function() if helpers.pending_win32(pending) then return end before_each(clear) @@ -82,7 +82,7 @@ describe("'incsubstitute' preserves", function() for _, case in pairs{"", "split", "nosplit"} do clear() insert(default_text) - execute("set incsubstitute=" .. case) + execute("set inccommand=" .. case) local delims = { '/', '#', ';', '%', ',', '@', '!', ''} for _,delim in pairs(delims) do @@ -101,7 +101,7 @@ describe("'incsubstitute' preserves", function() clear() execute("set undolevels=139") execute("setlocal undolevels=34") - execute("set incsubstitute=" .. case) + execute("set inccommand=" .. case) insert("as") feed(":%s/as/glork/<enter>") eq(meths.get_option('undolevels'), 139) @@ -112,7 +112,7 @@ describe("'incsubstitute' preserves", function() it("b:changedtick", function() for _, case in pairs{"", "split", "nosplit"} do clear() - execute("set incsubstitute=" .. case) + execute("set inccommand=" .. case) feed([[isome text 1<C-\><C-N>]]) feed([[osome text 2<C-\><C-N>]]) local expected_tick = eval("b:changedtick") @@ -130,7 +130,7 @@ describe("'incsubstitute' preserves", function() end) -describe("'incsubstitute' preserves undo", function() +describe(":substitute, 'inccommand' preserves undo", function() if helpers.pending_win32(pending) then return end local cases = { "", "split", "nosplit" } @@ -155,7 +155,7 @@ describe("'incsubstitute' preserves undo", function() local function test_sub(substring, split, redoable) clear() - execute("set incsubstitute=" .. split) + execute("set inccommand=" .. split) insert("1") feed("o2<esc>") @@ -181,7 +181,7 @@ describe("'incsubstitute' preserves undo", function() local function test_notsub(substring, split, redoable) clear() - execute("set incsubstitute=" .. split) + execute("set inccommand=" .. split) insert("1") feed("o2<esc>") @@ -215,7 +215,7 @@ describe("'incsubstitute' preserves undo", function() local function test_threetree(substring, split) clear() - execute("set incsubstitute=" .. split) + execute("set inccommand=" .. split) insert("1") feed("o2<esc>") @@ -567,7 +567,7 @@ describe("'incsubstitute' preserves undo", function() end) -describe("incsubstitute=split", function() +describe(":substitute, inccommand=split", function() if helpers.pending_win32(pending) then return end local screen = Screen.new(30,15) @@ -841,7 +841,7 @@ describe("incsubstitute=split", function() end) -describe("incsubstitute=nosplit", function() +describe(":substitute, inccommand=nosplit", function() if helpers.pending_win32(pending) then return end local screen = Screen.new(20,10) @@ -917,7 +917,7 @@ describe("incsubstitute=nosplit", function() end) -describe("'incsubstitute' with a failing expression", function() +describe(":substitute, 'inccommand' with a failing expression", function() if helpers.pending_win32(pending) then return end local screen = Screen.new(20,10) @@ -931,7 +931,7 @@ describe("'incsubstitute' with a failing expression", function() it('in the pattern does nothing for', function() for _, case in pairs(cases) do refresh(case) - execute("set incsubstitute=" .. case) + execute("set inccommand=" .. case) feed(":silent! %s/tw\\(/LARD/<enter>") expect(default_text) end @@ -943,7 +943,7 @@ describe("'incsubstitute' with a failing expression", function() local replacements = { "\\='LARD", "\\=xx_novar__xx" } for _, repl in pairs(replacements) do - execute("set incsubstitute=" .. case) + execute("set inccommand=" .. case) feed(":silent! %s/tw/" .. repl .. "/<enter>") expect(default_text:gsub("tw", "")) execute("undo") @@ -953,7 +953,7 @@ describe("'incsubstitute' with a failing expression", function() end) -describe("'incsubstitute' and :cnoremap", function() +describe("'inccommand' and :cnoremap", function() local cases = { "", "split", "nosplit" } local function refresh(case) @@ -1043,10 +1043,10 @@ describe("'incsubstitute' and :cnoremap", function() end end) - it('work when a mapping disables incsub', function() + it("work when a mapping disables 'inccommand'", function() for _, case in pairs(cases) do refresh(case) - execute("cnoremap <expr> x execute('set incsubstitute=')[-1]") + execute("cnoremap <expr> x execute('set inccommand=')[-1]") feed(":%s/tw/toxa/g<enter>") expect(default_text:gsub("tw", "toa")) @@ -1067,15 +1067,15 @@ describe("'incsubstitute' and :cnoremap", function() end) -describe("'incsubstitute': autocommands", function() +describe("'inccommand': autocommands", function() before_each(clear) -- keys are events to be tested -- values are arrays like -- { open = { 1 }, close = { 2, 3} } -- which would mean that during the test below the event fires for - -- buffer 1 when opening an incsub window, and for buffers 2 and 3 - -- when closing an incsub window + -- buffer 1 when opening the preview window, and for buffers 2 and 3 + -- when closing the preview window local eventsExpected = { BufAdd = {}, BufDelete = {}, @@ -1155,7 +1155,7 @@ describe("'incsubstitute': autocommands", function() end) -describe("'incsubstitute': split windows", function() +describe("'inccommand': split windows", function() if helpers.pending_win32(pending) then return end local screen |