在vim中,有没有办法取消搜索*而不*重置光标位置?

问题描述 投票:0回答:5

在vim中,我打开了hlsearch和incsearch。当我开始搜索时,它会立即转到第一个匹配项。如果我按回车键接受搜索,结果将突出显示,并且光标将定位在第一个匹配项处。如果我按 Esc 取消,光标位置将重置为开始搜索时所在的位置。

在这种情况下有没有办法让 Esc 取消搜索但将光标位置保留在第一个匹配项上?这样我就会到达正确的位置,但不会突出显示任何内容。

谢谢!

vim
5个回答
3
投票

我将其添加到我的 .vimrc 中:

:command C let @/=""

我喜欢搜索突出显示,我只是不喜欢它们留下来,所以当我完成搜索后,我只需输入

:C
,它们就会消失!

此外,我将突出显示更改为下划线,而不是选择风格,这对我的眼睛来说更容易,但仍然可以轻松地在页面上挑选出多个匹配项,而不必一遍又一遍地盲目地

n
。在我看来,两全其美。


2
投票

您可以在点击

:nohl
后使用
<Enter>
取消突出显示。

您可以通过使用映射轻松地在突出显示模式和非突出显示模式之间切换:

" put this in your vimrc
nnoremap <Space> :set hls!<CR>

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

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

1
投票

您可以使用

:nohlsearch
暂时取消突出显示;来自
:h :nohlsearch

:noh[lsearch]

停止突出显示

hlsearch
选项。使用搜索命令或设置
hlsearch
选项时,它会自动重新打开。

您可以轻松地将其映射到您想要的任何内容,我碰巧使用

<leader>h

nmap <silent> <leader>h :nohlsearch<CR>

当然,你必须先按Enter退出搜索模式,然后才能点击映射,但之后点击映射键很快就会成为习惯。


0
投票

我假设您确实想要一种在突出显示搜索模式和不突出显示之间进行快速切换的方法。我这样说是因为按

enter
是退出搜索的一种方法,它将光标保持在当前位置,而
escape
则以将光标重置到搜索之前的位置的方式退出。

因此,要切换突出显示(不使用

<leader>
),您可以将以下内容放入 .vimrc 文件中(我的 .vimrc 文件中有一堆切换布尔值,全部以 开头):

nmap \th :set invhls<CR>

那么从突出显示到不突出显示所需要做的就是:

\th

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

spell
number
ignorecase
paste
wrap

一旦您对 vim 更加熟悉,您就可以开始使用

<leader>


0
投票

不,如果不按一些额外的键,这是不可能的。要将光标保留在新位置,需要按

Enter
Esc
会将光标移回之前的位置。

要关闭可能打扰的突出显示,直到下一次搜索,可以将以下映射添加到

~/.vimrc
,以实现
Ctrl
+
L
快捷方式:

" nohlsearch, disable highlighting until next search
nnoremap <c-l> :noh<cr><c-l>

不要重新映射

Esc
来关闭突出显示,因为这可能会给 Vim 带来故障。请参阅 vimrc - 为什么此 正常模式映射会影响启动? - Vi 和 Vim 堆栈交换 了解详情。

© www.soinside.com 2019 - 2024. All rights reserved.