在vim中,有没有一种方法可以取消搜索而不重置光标位置?

3
在vim中,我打开了hlsearch和incsearch。当我开始搜索时,它会立即跳转到第一个匹配项。如果我按回车键接受搜索,结果将被突出显示,并且光标将定位在第一个匹配项上。如果我按Esc键取消,则光标位置将重置为我开始搜索时的位置。
在这种情况下,有没有一种方法可以使Esc取消搜索但将光标位置保留在第一个匹配项上?这样我就会停在正确的位置,但没有任何突出显示的内容。
谢谢!

1
有一天我关闭了hlsearch,从此再也没有用过。你可能认为你需要它,但实际上并不是这样。如果你真的需要突出显示某些内容,你总是可以暂时重新打开它。 - Conner
1
你的想法存在问题:如果你取消搜索,那就意味着你不想执行它。在这种情况下,光标没有理由移动到第一个匹配项:没有搜索,也就没有移动。 - romainl
一种常见的映射是使用 <c-l>,它重新绘制屏幕以清除高亮:nnoremap <silent> <C-l> :noh<CR><C-l>。如果您的终端可以处理它,则映射 <esc> 也很好:nnoremap <silent> <esc> <esc>:noh<cr> - Peter Rincker
4个回答

2

我在我的 .vimrc 文件中添加了以下内容:

:command C let @/=""

我喜欢搜索结果的高亮显示,但不希望它们一直存在,所以当我完成搜索后,只需键入:C,它们就会消失!

另外,我将我的高亮显示更改为下划线而不是选择式样式,这对我的眼睛更加友好,但仍然可以轻松地在页面上选择多个匹配项,而不必盲目地一遍又一遍地按n。在我看来,这是最好的两全其美的方式。


1
您可以使用:nohlsearch临时去除高亮显示;关于:h :nohlsearch的说明:

:noh[lsearch]

停止hlsearch选项的高亮显示。在使用搜索命令或设置hlsearch选项时,它会自动打开。

您可以轻松将其映射到任何想要的内容,我通常使用<leader>h
nmap <silent> <leader>h :nohlsearch<CR>

当然,在按下映射键之前,您必须先按下Enter退出搜索模式,但是很快就会习惯于在此之后按下映射键。

1
你可以在按下<Enter>后使用:nohl取消高亮。
你可以通过使用映射轻松切换高亮模式和非高亮模式:
" put this in your vimrc
nnoremap <Space> :set hls!<CR>

或者,您可以使用映射来清除当前的搜索词。

" put this in your vimrc
nnoremap <Space> :let @/=""<CR>

没错,但每次搜索都这样做太麻烦了。我使用搜索来在文件中移动 -- 目标是尽可能快速。 - Devin Lane
Devin Lane:你可以使用映射来使它更容易。 - rampion

0

我做出一个假设,你真的想要一种快速切换搜索模式高亮和不高亮的方法。我这么说是因为按下 enter 是退出搜索的一种方式,它会保持光标在当前位置,而按下 escape 则会以一种将光标重置到搜索前位置的方式退出。

所以,如果你想要切换高亮(不使用 <leader>),你可以将以下内容放入你的 .vimrc 文件中(我的 .vimrc 文件中有一堆布尔值切换,它们都以 \t 开头):

nmap \th :set invhls<CR>

然后,要从高亮状态切换到非高亮状态,您所需做的只是:

\th

我使用的其他切换映射是用于布尔值的spellnumberignorecasepastewrap

一旦你更熟悉vim,你可以开始使用<leader>


我宁愿不要按额外的键来关闭我一开始就不想打开的模式(搜索),但感谢您指出 <leader> - 我之前不知道它的存在。 - Devin Lane
1
你只是想关闭 hlsearch 吗?你说你已经开启了它,但听起来你并不喜欢它。如果你在搜索时喜欢它开启,但在搜索完成后喜欢它关闭,最好的解决方案是快速切换选项。我有什么遗漏吗? - cforbish
1
@cforbish,我认为你误导了人们,让他们认为这是一件神秘而复杂的事情,应该避免。在:h <leader>中,有很多解释只需要几个按键即可找到。 - Andrew Marshall
@cforbish 这样说吧:如果我正在搜索某些东西,那么当我浏览结果时,我希望看到高亮显示。但是,如果搜索立即将我带到我想要的地方或足够接近,我希望立即切换到正常/编辑模式,并且光标位于搜索词上,而不会分散注意力的高亮显示。如果有一种方法可以使取消搜索不重置光标位置,那就太完美了。 - Devin Lane
1
@Devin Lane 我猜你想在搜索时看到所有匹配项都被突出显示。如果设置了“nohls”和“incsearch”,则应该突出显示当前搜索内容。这样对吗? - cforbish
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接