mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	'inccommand': disable 'cursorline', 'spell' in preview
This commit is contained in:
		@@ -134,7 +134,6 @@ Events:
 | 
				
			|||||||
  |TextYankPost|
 | 
					  |TextYankPost|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Highlight groups:
 | 
					Highlight groups:
 | 
				
			||||||
  |hl-Substitute|
 | 
					 | 
				
			||||||
  |hl-QuickFixLine|
 | 
					  |hl-QuickFixLine|
 | 
				
			||||||
  |hl-Substitute|
 | 
					  |hl-Substitute|
 | 
				
			||||||
  |hl-TermCursor|
 | 
					  |hl-TermCursor|
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3946,42 +3946,28 @@ skip:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // Show 'incsubstitute' preview if there are matched lines.
 | 
					  // Show 'incsubstitute' preview if there are matched lines.
 | 
				
			||||||
  buf_T *incsub_buf = NULL;
 | 
					  buf_T *incsub_buf = NULL;
 | 
				
			||||||
  if (matched_lines.size != 0 && pat != NULL && *p_ics != NUL && eap->is_live) {
 | 
					  if (eap->is_live && matched_lines.size != 0 && pat != NULL && *p_ics != NUL) {
 | 
				
			||||||
    // Place cursor on the first match after the cursor.
 | 
					    // Place cursor on the first match after the cursor. (If all matches are
 | 
				
			||||||
    // If all matches are before the cursor, then do_sub already placed the
 | 
					    // above, then do_sub already placed cursor on the last match.)
 | 
				
			||||||
    // cursor on the last match.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    linenr_T cur_lnum = 0;
 | 
					 | 
				
			||||||
    colnr_T cur_col = -1;
 | 
					    colnr_T cur_col = -1;
 | 
				
			||||||
    MatchedLine current;
 | 
					    MatchedLine curmatch;
 | 
				
			||||||
 | 
					    for (size_t j = 0; j < matched_lines.size && cur_col == -1; j++) {
 | 
				
			||||||
    for (size_t j = 0; j < matched_lines.size; j++) {
 | 
					      curmatch = matched_lines.items[j];
 | 
				
			||||||
      current = matched_lines.items[j];
 | 
					      if (curmatch.lnum == old_cursor.lnum) {
 | 
				
			||||||
      cur_lnum = current.lnum;
 | 
					        // On cursor line; iterate in-line matches to find one after cursor.
 | 
				
			||||||
 | 
					        for (size_t i = 0; i < curmatch.cols.size; i++) {
 | 
				
			||||||
      // 1. Match on line of the cursor, need to iterate over the
 | 
					          if (curmatch.cols.items[i] >= old_cursor.col) {
 | 
				
			||||||
      //    matches on this line to see if there is one on a later
 | 
					            cur_col = curmatch.cols.items[i];
 | 
				
			||||||
      //    column
 | 
					            curwin->w_cursor.lnum = curmatch.lnum;
 | 
				
			||||||
      if (cur_lnum == old_cursor.lnum) {
 | 
					            curwin->w_cursor.col = cur_col;
 | 
				
			||||||
        for (size_t i = 0; i < current.cols.size; i++) {
 | 
					 | 
				
			||||||
          if (current.cols.items[i] >= old_cursor.col) {
 | 
					 | 
				
			||||||
            cur_col = current.cols.items[i];
 | 
					 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // match on cursor's line, after the cursor
 | 
					      } else if (curmatch.lnum > old_cursor.lnum) {
 | 
				
			||||||
        if (cur_col != -1) {
 | 
					        // After cursor; put cursor on first match there.
 | 
				
			||||||
          curwin->w_cursor.lnum = cur_lnum;
 | 
					        cur_col = curmatch.cols.items[0];
 | 
				
			||||||
          curwin->w_cursor.col = cur_col;
 | 
					        curwin->w_cursor.lnum = curmatch.lnum;
 | 
				
			||||||
          break;
 | 
					        curwin->w_cursor.col = cur_col;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      // 2. Match on line after cursor, just put cursor on column
 | 
					 | 
				
			||||||
      //    of first match there
 | 
					 | 
				
			||||||
      } else if (cur_lnum > old_cursor.lnum) {
 | 
					 | 
				
			||||||
          cur_col = current.cols.items[0];
 | 
					 | 
				
			||||||
          curwin->w_cursor.lnum = cur_lnum;
 | 
					 | 
				
			||||||
          curwin->w_cursor.col = cur_col;
 | 
					 | 
				
			||||||
          break;
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3992,16 +3978,13 @@ skip:
 | 
				
			|||||||
    curwin->w_cursor = old_cursor;  // don't move the cursor
 | 
					    curwin->w_cursor = old_cursor;  // don't move the cursor
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MatchedLine current;
 | 
					  for (MatchedLine m; kv_size(matched_lines);) {
 | 
				
			||||||
  for (size_t j = 0; j < matched_lines.size; j++) {
 | 
					    m = kv_pop(matched_lines);
 | 
				
			||||||
    current = matched_lines.items[j];
 | 
					    xfree(m.line);
 | 
				
			||||||
    if (current.line) {
 | 
					    kv_destroy(m.cols);
 | 
				
			||||||
      xfree(current.line);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    kv_destroy(current.cols);
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  kv_destroy(matched_lines);
 | 
					  kv_destroy(matched_lines);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return incsub_buf;
 | 
					  return incsub_buf;
 | 
				
			||||||
}  // NOLINT(readability/fn_size)
 | 
					}  // NOLINT(readability/fn_size)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -6069,13 +6052,15 @@ static buf_T *incsub_display(char_u *pat, char_u *sub,
 | 
				
			|||||||
    buf_open_special(incsub_buf ? bufnr : 0, "[inc_sub]", "incsub");
 | 
					    buf_open_special(incsub_buf ? bufnr : 0, "[inc_sub]", "incsub");
 | 
				
			||||||
    buf_clear();
 | 
					    buf_clear();
 | 
				
			||||||
    incsub_buf = curbuf;
 | 
					    incsub_buf = curbuf;
 | 
				
			||||||
    set_option_value((char_u *)"bl", 0L, NULL, OPT_LOCAL);
 | 
					 | 
				
			||||||
    set_option_value((char_u *)"bh", 0L, (char_u *)"hide", OPT_LOCAL);
 | 
					    set_option_value((char_u *)"bh", 0L, (char_u *)"hide", OPT_LOCAL);
 | 
				
			||||||
    bufnr = incsub_buf->handle;
 | 
					    bufnr = incsub_buf->handle;
 | 
				
			||||||
 | 
					    curbuf->b_p_bl = false;
 | 
				
			||||||
    curbuf->b_p_ma = true;
 | 
					    curbuf->b_p_ma = true;
 | 
				
			||||||
    curbuf->b_p_ul = -1;
 | 
					    curbuf->b_p_ul = -1;
 | 
				
			||||||
    curwin->w_p_fen = false;
 | 
					 | 
				
			||||||
    curbuf->b_p_tw = 0;         // Reset 'textwidth' (was set by ftplugin)
 | 
					    curbuf->b_p_tw = 0;         // Reset 'textwidth' (was set by ftplugin)
 | 
				
			||||||
 | 
					    curwin->w_p_cul = false;
 | 
				
			||||||
 | 
					    curwin->w_p_spell = false;
 | 
				
			||||||
 | 
					    curwin->w_p_fen = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Width of the "| lnum|..." column which displays the line numbers.
 | 
					    // Width of the "| lnum|..." column which displays the line numbers.
 | 
				
			||||||
    linenr_T highest_num_line = kv_last(*matched_lines).lnum;
 | 
					    linenr_T highest_num_line = kv_last(*matched_lines).lnum;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@ local meths = helpers.meths
 | 
				
			|||||||
local neq = helpers.neq
 | 
					local neq = helpers.neq
 | 
				
			||||||
local ok = helpers.ok
 | 
					local ok = helpers.ok
 | 
				
			||||||
local source = helpers.source
 | 
					local source = helpers.source
 | 
				
			||||||
 | 
					local wait = helpers.wait
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local default_text = [[
 | 
					local default_text = [[
 | 
				
			||||||
  Inc substitution on
 | 
					  Inc substitution on
 | 
				
			||||||
@@ -40,6 +41,7 @@ local function common_setup(screen, incsub, text)
 | 
				
			|||||||
      [13] = {bold = true, foreground = Screen.colors.SeaGreen},
 | 
					      [13] = {bold = true, foreground = Screen.colors.SeaGreen},
 | 
				
			||||||
      [14] = {foreground = Screen.colors.White, background = Screen.colors.Red},
 | 
					      [14] = {foreground = Screen.colors.White, background = Screen.colors.Red},
 | 
				
			||||||
      [15] = {bold=true, foreground=Screen.colors.Blue},
 | 
					      [15] = {bold=true, foreground=Screen.colors.Blue},
 | 
				
			||||||
 | 
					      [16] = {background=Screen.colors.Grey90},  -- cursorline
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -120,7 +122,7 @@ describe("'incsubstitute' preserves", function()
 | 
				
			|||||||
        some text 1
 | 
					        some text 1
 | 
				
			||||||
        some text 2]])
 | 
					        some text 2]])
 | 
				
			||||||
      feed(":%s/e/XXX/")
 | 
					      feed(":%s/e/XXX/")
 | 
				
			||||||
      helpers.wait()
 | 
					      wait()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      eq(expected_tick, eval("b:changedtick"))
 | 
					      eq(expected_tick, eval("b:changedtick"))
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@@ -703,12 +705,13 @@ describe("incsubstitute=split", function()
 | 
				
			|||||||
    ]])
 | 
					    ]])
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('highlights the pattern with :set hlsearch', function()
 | 
					  it("'hlsearch' highlights the substitution, 'cursorline' does not", function()
 | 
				
			||||||
    execute("set hlsearch")
 | 
					    execute("set hlsearch")
 | 
				
			||||||
 | 
					    execute("set cursorline")  -- Should NOT appear in the preview window.
 | 
				
			||||||
    feed(":%s/tw")
 | 
					    feed(":%s/tw")
 | 
				
			||||||
    screen:expect([[
 | 
					    screen:expect([[
 | 
				
			||||||
      Inc substitution on           |
 | 
					      Inc substitution on           |
 | 
				
			||||||
      {9:tw}o lines                     |
 | 
					      {9:tw}{16:o lines                     }|
 | 
				
			||||||
                                    |
 | 
					                                    |
 | 
				
			||||||
      {15:~                             }|
 | 
					      {15:~                             }|
 | 
				
			||||||
      {15:~                             }|
 | 
					      {15:~                             }|
 | 
				
			||||||
@@ -796,8 +799,21 @@ describe("incsubstitute=split", function()
 | 
				
			|||||||
    ]])
 | 
					    ]])
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('does not increase the buffer numbers unduly', function()
 | 
					  it('does not spam the buffer numbers', function()
 | 
				
			||||||
    feed(":%s/tw/Xo/g<enter>")
 | 
					    -- The preview buffer is re-used (unless user deleted it), so buffer numbers
 | 
				
			||||||
 | 
					    -- will not increase on each keystroke.
 | 
				
			||||||
 | 
					    feed(":%s/tw/Xo/g")
 | 
				
			||||||
 | 
					    -- Delete and re-type the g a few times.
 | 
				
			||||||
 | 
					    feed("<BS>")
 | 
				
			||||||
 | 
					    wait()
 | 
				
			||||||
 | 
					    feed("g")
 | 
				
			||||||
 | 
					    wait()
 | 
				
			||||||
 | 
					    feed("<BS>")
 | 
				
			||||||
 | 
					    wait()
 | 
				
			||||||
 | 
					    feed("g")
 | 
				
			||||||
 | 
					    wait()
 | 
				
			||||||
 | 
					    feed("<CR>")
 | 
				
			||||||
 | 
					    wait()
 | 
				
			||||||
    feed(":vs tmp<enter>")
 | 
					    feed(":vs tmp<enter>")
 | 
				
			||||||
    eq(3, helpers.call('bufnr', '$'))
 | 
					    eq(3, helpers.call('bufnr', '$'))
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
@@ -963,7 +979,7 @@ describe("'incsubstitute' and :cnoremap", function()
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('work then mappings move the cursor', function()
 | 
					  it('work when mappings move the cursor', function()
 | 
				
			||||||
    for _, case in pairs(cases) do
 | 
					    for _, case in pairs(cases) do
 | 
				
			||||||
      refresh(case)
 | 
					      refresh(case)
 | 
				
			||||||
      execute("cnoremap ,S LINES/<left><left><left><left><left><left>")
 | 
					      execute("cnoremap ,S LINES/<left><left><left><left><left><left>")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user