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 | 
