neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit aa959f7b858451a9cd0633b703a236f09d2fa44e
parent 930817f1009d9d392103b5440e2503cb47fdacc0
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Sat, 10 Jan 2026 08:03:10 +0800

vim-patch:9.1.2069: Search wrap indicator not shown w/out 'shm-S' (#37332)

Problem:  when shortmess doesn't have 'S', backward search wrap doesn't
          show the "W" before count. forward search works fine but
          backward fails because the position check logic is backwards -
          it checks if cursor < pos instead of using the existing
          wrapped flag.
Solution: Use sia->sa_wrapped flag that searchit() already sets
          correctly (glepnir).

fixes:  vim/vim#5280
closes: vim/vim#19138

https://github.com/vim/vim/commit/ccb7b433652eae18550ab0dfb35722cc6bf6234c

Co-authored-by: glepnir <glephunter@gmail.com>
Diffstat:
Msrc/nvim/search.c | 4+---
Mtest/functional/legacy/search_stat_spec.lua | 17++++++++++++-----
Mtest/old/testdir/test_search_stat.vim | 6+++---
3 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/src/nvim/search.c b/src/nvim/search.c @@ -1356,9 +1356,7 @@ int do_search(oparg_T *oap, int dirc, int search_delim, char *pat, size_t patlen *dircp = (char)search_delim; // restore second '/' or '?' for normal_cmd() } - if (!shortmess(SHM_SEARCH) - && ((dirc == '/' && lt(pos, curwin->w_cursor)) - || (dirc == '?' && lt(curwin->w_cursor, pos)))) { + if (!shortmess(SHM_SEARCH) && sia && sia->sa_wrapped) { show_top_bot_msg = true; } diff --git a/test/functional/legacy/search_stat_spec.lua b/test/functional/legacy/search_stat_spec.lua @@ -67,10 +67,17 @@ describe('search stat', function() {1:~ }|*5 /foo [1/2] | ]]) - -- Note: there is an intermediate state where the search stat disappears. feed('n') - screen:expect_unchanged(true) + screen:expect([[ + if | + {13:^+-- 2 lines: foo·············}| + endif | + | + {1:~ }|*5 + /foo W [1/2] | + ]]) feed('n') + -- Note: there is an intermediate state where the search stat disappears. screen:expect_unchanged(true) end) @@ -163,7 +170,7 @@ describe('search stat', function() {10:^test} | | {1:~ }|*7 - /\<test\> [1/1] | + /\<test\> W [1/1] | ]]) feed('N') @@ -171,7 +178,7 @@ describe('search stat', function() {10:^test} | | {1:~ }|*7 - ?\<test\> [1/1] | + ?\<test\> W [1/1] | ]]) command('set shm+=S') @@ -205,7 +212,7 @@ describe('search stat', function() Mainmainmainmmmain{10:^mAin} | | {1:~ }|*7 - /mAin [1/1] | + /mAin W [1/1] | ]]) end) end) diff --git a/test/old/testdir/test_search_stat.vim b/test/old/testdir/test_search_stat.vim @@ -332,13 +332,13 @@ func Test_search_stat_foldopen() call writefile(lines, 'Xsearchstat1', 'D') let buf = RunVimInTerminal('-S Xsearchstat1', #{rows: 10}) - call VerifyScreenDump(buf, 'Test_searchstat_3', {}) + call VerifyScreenDump(buf, 'Test_searchfoldopen_1', {}) call term_sendkeys(buf, "n") - call VerifyScreenDump(buf, 'Test_searchstat_3', {}) + call VerifyScreenDump(buf, 'Test_searchfoldopen_2', {}) call term_sendkeys(buf, "n") - call VerifyScreenDump(buf, 'Test_searchstat_3', {}) + call VerifyScreenDump(buf, 'Test_searchfoldopen_2', {}) call StopVimInTerminal(buf) endfunc