Patch 8.0.1250
Problem: 'hlsearch' highlighting not removed after incsearch (lacygoill)
Solution: Redraw all windows. Start search at the end of the match. Improve
how CTRL-G works with incremental search. Add tests. (Christian
Brabandt, Hirohito Higashi, haya14busa, closes #2267)
Files: runtime/doc/options.txt, src/ex_getln.c,
src/testdir/test_search.vim
*** ../vim-8.0.1249/runtime/doc/options.txt 2017-10-29 16:39:36.258313882
+0100
--- runtime/doc/options.txt 2017-11-02 18:56:51.217676323 +0100
***************
*** 4358,4365 ****
Example: >
augroup vimrc-incsearch-highlight
autocmd!
! autocmd CmdlineEnter [/\?] :set hlsearch
! autocmd CmdlineLeave [/\?] :set nohlsearch
augroup END
<
CTRL-L can be used to add one character from after the current match
--- 4454,4461 ----
Example: >
augroup vimrc-incsearch-highlight
autocmd!
! autocmd CmdlineEnter /,\? :set hlsearch
! autocmd CmdlineLeave /,\? :set nohlsearch
augroup END
<
CTRL-L can be used to add one character from after the current match
*** ../vim-8.0.1249/src/ex_getln.c 2017-10-29 16:39:36.262313855 +0100
--- src/ex_getln.c 2017-11-02 18:56:51.217676323 +0100
***************
*** 1717,1728 ****
--- 1717,1735 ----
pos_T t;
int search_flags = SEARCH_NOOF;
+ if (ccline.cmdlen == 0)
+ goto cmdline_not_changed;
+
save_last_search_pattern();
cursor_off();
out_flush();
if (c == Ctrl_G)
{
t = match_end;
+ if (LT_POS(match_start, match_end))
+ /* start searching at the end of the match
+ * not at the beginning of the next column */
+ (void)decl(&t);
search_flags += SEARCH_COL;
}
else
***************
*** 1945,1950 ****
--- 1952,1958 ----
{
i = 0;
SET_NO_HLSEARCH(TRUE); /* turn off previous highlight */
+ redraw_all_later(SOME_VALID);
}
else
{
***************
*** 2082,2088 ****
curwin->w_botline = old_botline;
highlight_match = FALSE;
validate_cursor(); /* needed for TAB */
! redraw_later(SOME_VALID);
}
#endif
--- 2090,2096 ----
curwin->w_botline = old_botline;
highlight_match = FALSE;
validate_cursor(); /* needed for TAB */
! redraw_all_later(SOME_VALID);
}
#endif
*** ../vim-8.0.1249/src/testdir/test_search.vim 2017-11-02 16:16:23.286239622
+0100
--- src/testdir/test_search.vim 2017-11-02 18:56:51.217676323 +0100
***************
*** 397,402 ****
--- 397,513 ----
bw!
endfunc
+ func Test_search_cmdline6()
+ " Test that consecutive matches
+ " are caught by <c-g>/<c-t>
+ if !exists('+incsearch')
+ return
+ endif
+ " need to disable char_avail,
+ " so that expansion of commandline works
+ call test_override("char_avail", 1)
+ new
+ call setline(1, [' bbvimb', ''])
+ set incsearch
+ " first match
+ norm! gg0
+ call feedkeys("/b\<cr>", 'tx')
+ call assert_equal([0,1,2,0], getpos('.'))
+ " second match
+ norm! gg0
+ call feedkeys("/b\<c-g>\<cr>", 'tx')
+ call assert_equal([0,1,3,0], getpos('.'))
+ " third match
+ norm! gg0
+ call feedkeys("/b\<c-g>\<c-g>\<cr>", 'tx')
+ call assert_equal([0,1,7,0], getpos('.'))
+ " first match again
+ norm! gg0
+ call feedkeys("/b\<c-g>\<c-g>\<c-g>\<cr>", 'tx')
+ call assert_equal([0,1,2,0], getpos('.'))
+ set nowrapscan
+ " last match
+ norm! gg0
+ call feedkeys("/b\<c-g>\<c-g>\<c-g>\<cr>", 'tx')
+ call assert_equal([0,1,7,0], getpos('.'))
+ " clean up
+ set wrapscan&vim
+ set noincsearch
+ call test_override("char_avail", 0)
+ bw!
+ endfunc
+
+ func Test_search_cmdline7()
+ " Test that an pressing <c-g> in an empty command line
+ " does not move the cursor
+ if !exists('+incsearch')
+ return
+ endif
+ " need to disable char_avail,
+ " so that expansion of commandline works
+ call test_override("char_avail", 1)
+ new
+ let @/='b'
+ call setline(1, [' bbvimb', ''])
+ set incsearch
+ " first match
+ norm! gg0
+ " moves to next match of previous search pattern, just like /<cr>
+ call feedkeys("/\<c-g>\<cr>", 'tx')
+ call assert_equal([0,1,2,0], getpos('.'))
+ " moves to next match of previous search pattern, just like /<cr>
+ call feedkeys("/\<cr>", 'tx')
+ call assert_equal([0,1,3,0], getpos('.'))
+ " moves to next match of previous search pattern, just like /<cr>
+ call feedkeys("/\<c-t>\<cr>", 'tx')
+ call assert_equal([0,1,7,0], getpos('.'))
+ set noincsearch
+ call test_override("char_avail", 0)
+ bw!
+ endfunc
+
+ func Test_search_cmdline8()
+ " Highlighting is cleared in all windows
+ " since hls applies to all windows
+ if !exists('+incsearch') || !has('terminal') || has('gui_running') ||
winwidth(0) < 30
+ return
+ endif
+ if has("win32")
+ throw "Skipped: Bug with sending <ESC> to terminal window not fixed yet"
+ endif
+ let h = winheight(0)
+ if h < 3
+ return
+ endif
+ " Prepare buffer text
+ let lines = ['abb vim vim vi', 'vimvivim']
+ call writefile(lines, 'Xsearch.txt')
+ let g:buf = term_start([GetVimProg(), '--clean', '-c', 'set noswapfile',
'Xsearch.txt'], {'term_rows': 3})
+
+ call term_wait(g:buf, 200)
+ call assert_equal(lines[0], term_getline(g:buf, 1))
+ call assert_equal(lines[1], term_getline(g:buf, 2))
+
+ call term_sendkeys(g:buf, ":set incsearch hlsearch\<cr>")
+ call term_sendkeys(g:buf, ":14vsp\<cr>")
+ call term_sendkeys(g:buf, "/vim\<cr>")
+ call term_sendkeys(g:buf, "/b\<esc>")
+ call term_sendkeys(g:buf, "gg0")
+ call term_wait(g:buf, 500)
+ let screen_line = term_scrape(g:buf, 1)
+ let [a0,a1,a2,a3] = [screen_line[3].attr, screen_line[4].attr,
+ \ screen_line[18].attr, screen_line[19].attr]
+ call assert_notequal(a0, a1)
+ call assert_notequal(a0, a3)
+ call assert_notequal(a1, a2)
+ call assert_equal(a0, a2)
+ call assert_equal(a1, a3)
+ " clean up
+ call delete('Xsearch.txt')
+
+ bwipe!
+ endfunc
+
" Tests for regexp with various magic settings
func Test_search_regexp()
enew!
***************
*** 566,571 ****
--- 677,683 ----
let attr_line2 = [a0,a0,a0,a0,a0,a0,a0,a0]
call assert_equal(attr_line1, map(term_scrape(g:buf,
1)[:len(attr_line1)-1], 'v:val.attr'))
call assert_equal(attr_line2, map(term_scrape(g:buf,
2)[:len(attr_line2)-1], 'v:val.attr'))
+ call delete('Xsearch.txt')
call delete('Xsearch.txt')
bwipe!
*** ../vim-8.0.1249/src/version.c 2017-11-02 18:19:14.474895412 +0100
--- src/version.c 2017-11-02 19:04:31.614976431 +0100
***************
*** 763,764 ****
--- 763,766 ----
{ /* Add new patch number below this line */
+ /**/
+ 1250,
/**/
--
A special law prohibits unmarried women from parachuting on Sunday or she
shall risk arrest, fine, and/or jailing.
[real standing law in Florida, United States of America]
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.