mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #17152 from zeertzjq/vim-8.2.3583
vim-patch:8.2.3583: the "gd" and "gD" commands do not update search stats
This commit is contained in:
commit
cb863d4e1f
@ -3098,8 +3098,14 @@ static void nv_gd(oparg_T *oap, int nchar, int thisblock)
|
|||||||
if ((len = find_ident_under_cursor(&ptr, FIND_IDENT)) == 0
|
if ((len = find_ident_under_cursor(&ptr, FIND_IDENT)) == 0
|
||||||
|| !find_decl(ptr, len, nchar == 'd', thisblock, SEARCH_START)) {
|
|| !find_decl(ptr, len, nchar == 'd', thisblock, SEARCH_START)) {
|
||||||
clearopbeep(oap);
|
clearopbeep(oap);
|
||||||
} else if ((fdo_flags & FDO_SEARCH) && KeyTyped && oap->op_type == OP_NOP) {
|
} else {
|
||||||
foldOpenCursor();
|
if ((fdo_flags & FDO_SEARCH) && KeyTyped && oap->op_type == OP_NOP) {
|
||||||
|
foldOpenCursor();
|
||||||
|
}
|
||||||
|
// clear any search statistics
|
||||||
|
if (messaging() && !msg_silent && !shortmess(SHM_SEARCHCOUNT)) {
|
||||||
|
clear_cmdline = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
" Tests for search_stats, when "S" is not in 'shortmess'
|
" Tests for search_stats, when "S" is not in 'shortmess'
|
||||||
|
|
||||||
source screendump.vim
|
|
||||||
source check.vim
|
source check.vim
|
||||||
|
source screendump.vim
|
||||||
|
|
||||||
func Test_search_stat()
|
func Test_search_stat()
|
||||||
new
|
new
|
||||||
set shortmess-=S
|
set shortmess-=S
|
||||||
" Append 50 lines with text to search for, "foobar" appears 20 times
|
" Append 50 lines with text to search for, "foobar" appears 20 times
|
||||||
call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10))
|
call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10))
|
||||||
call nvim_win_set_cursor(0, [1, 0])
|
|
||||||
|
call cursor(1, 1)
|
||||||
|
|
||||||
" searchcount() returns an empty dictionary when previous pattern was not set
|
" searchcount() returns an empty dictionary when previous pattern was not set
|
||||||
call assert_equal({}, searchcount(#{pattern: ''}))
|
call assert_equal({}, searchcount(#{pattern: ''}))
|
||||||
@ -45,7 +46,6 @@ func Test_search_stat()
|
|||||||
\ searchcount(#{pattern: 'fooooobar', maxcount: 1}))
|
\ searchcount(#{pattern: 'fooooobar', maxcount: 1}))
|
||||||
|
|
||||||
" match at second line
|
" match at second line
|
||||||
call cursor(1, 1)
|
|
||||||
let messages_before = execute('messages')
|
let messages_before = execute('messages')
|
||||||
let @/ = 'fo*\(bar\?\)\?'
|
let @/ = 'fo*\(bar\?\)\?'
|
||||||
let g:a = execute(':unsilent :norm! n')
|
let g:a = execute(':unsilent :norm! n')
|
||||||
@ -262,6 +262,34 @@ func Test_searchcount_fails()
|
|||||||
call assert_fails('echo searchcount("boo!")', 'E715:')
|
call assert_fails('echo searchcount("boo!")', 'E715:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_searchcount_in_statusline()
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
set shortmess-=S
|
||||||
|
call append(0, 'this is something')
|
||||||
|
function TestSearchCount() abort
|
||||||
|
let search_count = searchcount()
|
||||||
|
if !empty(search_count)
|
||||||
|
return '[' . search_count.current . '/' . search_count.total . ']'
|
||||||
|
else
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
set hlsearch
|
||||||
|
set laststatus=2 statusline+=%{TestSearchCount()}
|
||||||
|
END
|
||||||
|
call writefile(lines, 'Xsearchstatusline')
|
||||||
|
let buf = RunVimInTerminal('-S Xsearchstatusline', #{rows: 10})
|
||||||
|
call TermWait(buf)
|
||||||
|
call term_sendkeys(buf, "/something")
|
||||||
|
call VerifyScreenDump(buf, 'Test_searchstat_4', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "\<Esc>")
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('Xsearchstatusline')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_search_stat_foldopen()
|
func Test_search_stat_foldopen()
|
||||||
CheckScreendump
|
CheckScreendump
|
||||||
|
|
||||||
@ -319,30 +347,29 @@ func! Test_search_stat_screendump()
|
|||||||
call delete('Xsearchstat')
|
call delete('Xsearchstat')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_searchcount_in_statusline()
|
func Test_search_stat_then_gd()
|
||||||
CheckScreendump
|
CheckScreendump
|
||||||
|
|
||||||
let lines =<< trim END
|
let lines =<< trim END
|
||||||
|
call setline(1, ['int cat;', 'int dog;', 'cat = dog;'])
|
||||||
set shortmess-=S
|
set shortmess-=S
|
||||||
call append(0, 'this is something')
|
|
||||||
function TestSearchCount() abort
|
|
||||||
let search_count = searchcount()
|
|
||||||
if !empty(search_count)
|
|
||||||
return '[' . search_count.current . '/' . search_count.total . ']'
|
|
||||||
else
|
|
||||||
return ''
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
set hlsearch
|
set hlsearch
|
||||||
set laststatus=2 statusline+=%{TestSearchCount()}
|
|
||||||
END
|
END
|
||||||
call writefile(lines, 'Xsearchstatusline')
|
call writefile(lines, 'Xsearchstatgd')
|
||||||
let buf = RunVimInTerminal('-S Xsearchstatusline', #{rows: 10})
|
|
||||||
call TermWait(buf)
|
let buf = RunVimInTerminal('-S Xsearchstatgd', #{rows: 10})
|
||||||
call term_sendkeys(buf, "/something")
|
call term_sendkeys(buf, "/dog\<CR>")
|
||||||
call VerifyScreenDump(buf, 'Test_searchstat_4', {})
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_searchstatgd_1', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "G0gD")
|
||||||
|
call TermWait(buf)
|
||||||
|
call VerifyScreenDump(buf, 'Test_searchstatgd_2', {})
|
||||||
|
|
||||||
call term_sendkeys(buf, "\<Esc>")
|
|
||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
call delete('Xsearchstatusline')
|
call delete('Xsearchstatgd')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
121
test/functional/legacy/search_stat_spec.lua
Normal file
121
test/functional/legacy/search_stat_spec.lua
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
|
local Screen = require('test.functional.ui.screen')
|
||||||
|
local clear, feed, exec, command = helpers.clear, helpers.feed, helpers.exec, helpers.command
|
||||||
|
local poke_eventloop = helpers.poke_eventloop
|
||||||
|
|
||||||
|
describe('search stat', function()
|
||||||
|
local screen
|
||||||
|
before_each(function()
|
||||||
|
clear()
|
||||||
|
screen = Screen.new(30, 10)
|
||||||
|
screen:set_default_attr_ids({
|
||||||
|
[1] = {bold = true, foreground = Screen.colors.Blue}, -- NonText
|
||||||
|
[2] = {background = Screen.colors.Yellow}, -- Search
|
||||||
|
[3] = {foreground = Screen.colors.Blue4, background = Screen.colors.LightGrey}, -- Folded
|
||||||
|
})
|
||||||
|
screen:attach()
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('right spacing with silent mapping vim-patch:8.1.1970', function()
|
||||||
|
exec([[
|
||||||
|
set shortmess-=S
|
||||||
|
" Append 50 lines with text to search for, "foobar" appears 20 times
|
||||||
|
call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 20))
|
||||||
|
call setline(2, 'find this')
|
||||||
|
call setline(70, 'find this')
|
||||||
|
nnoremap n n
|
||||||
|
let @/ = 'find this'
|
||||||
|
call cursor(1,1)
|
||||||
|
norm n
|
||||||
|
]])
|
||||||
|
screen:expect([[
|
||||||
|
foobar |
|
||||||
|
{2:^find this} |
|
||||||
|
fooooobar |
|
||||||
|
foba |
|
||||||
|
foobar |
|
||||||
|
foobar |
|
||||||
|
foo |
|
||||||
|
fooooobar |
|
||||||
|
foba |
|
||||||
|
/find this [1/2] |
|
||||||
|
]])
|
||||||
|
command('nnoremap <silent> n n')
|
||||||
|
feed('gg0n')
|
||||||
|
screen:expect([[
|
||||||
|
foobar |
|
||||||
|
{2:^find this} |
|
||||||
|
fooooobar |
|
||||||
|
foba |
|
||||||
|
foobar |
|
||||||
|
foobar |
|
||||||
|
foo |
|
||||||
|
fooooobar |
|
||||||
|
foba |
|
||||||
|
[1/2] |
|
||||||
|
]])
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('when only match is in fold vim-patch:8.2.0840', function()
|
||||||
|
exec([[
|
||||||
|
set shortmess-=S
|
||||||
|
setl foldenable foldmethod=indent foldopen-=search
|
||||||
|
call append(0, ['if', "\tfoo", "\tfoo", 'endif'])
|
||||||
|
let @/ = 'foo'
|
||||||
|
call cursor(1,1)
|
||||||
|
norm n
|
||||||
|
]])
|
||||||
|
screen:expect([[
|
||||||
|
if |
|
||||||
|
{3:^+-- 2 lines: foo·············}|
|
||||||
|
endif |
|
||||||
|
|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
/foo [1/2] |
|
||||||
|
]])
|
||||||
|
feed('n')
|
||||||
|
poke_eventloop()
|
||||||
|
screen:expect_unchanged()
|
||||||
|
feed('n')
|
||||||
|
poke_eventloop()
|
||||||
|
screen:expect_unchanged()
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('is cleared by gd and gD vim-patch:8.2.3583', function()
|
||||||
|
exec([[
|
||||||
|
call setline(1, ['int cat;', 'int dog;', 'cat = dog;'])
|
||||||
|
set shortmess-=S
|
||||||
|
set hlsearch
|
||||||
|
]])
|
||||||
|
feed('/dog<CR>')
|
||||||
|
screen:expect([[
|
||||||
|
int cat; |
|
||||||
|
int {2:^dog}; |
|
||||||
|
cat = {2:dog}; |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
/dog [1/2] |
|
||||||
|
]])
|
||||||
|
feed('G0gD')
|
||||||
|
screen:expect([[
|
||||||
|
int {2:^cat}; |
|
||||||
|
int dog; |
|
||||||
|
{2:cat} = dog; |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
end)
|
||||||
|
end)
|
Loading…
Reference in New Issue
Block a user