Vim 清除最后一个搜索突出显示

在 Vim 中进行搜索后,我将所有出现的事件突出显示。如何禁用它?我现在再次搜索找不到的乱码。

有没有一种方法可以暂时禁用突出显示,然后在需要时重新启用它?

答案

要关闭高亮显示直到下一次搜索:

:noh

或完全关闭突出显示:

set nohlsearch

或者,要切换它:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

VIM 文档

要清除最后使用的搜索模式:

:let @/ = ""

这不会将模式设置为空字符串,因为它将在任何地方都匹配。就像启动 Vim 一样,该模式已真正清除。

你可以做

:noh

:nohlsearch暂时禁用搜索突出显示,直到下一次搜索为止。

我几年前在 vim.org 上找到了这个答案:

将以下内容添加到您的. vimrc 中:

"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>

因此,搜索后,只需在命令模式下再次按回车键,突出显示就会消失。

来自http://twitter.com/jonbho/status/2194406821

" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[

第二行是映射到转义键所必需的,因为 Vim 内部使用转义来表示特殊键。

我原来的解决方案(如下)既脏又浪费。我现在使用:noh

像 Vim 中的许多功能一样,正确的方法通常不容易发现。

-

(不要这样做)

搜索不太可能的字符序列(将主行上的键混在一起):

/;alskdjf;

这在 vim 中有效且更少,并且比 @ShaunBouckaert 的逻辑上更清洁的解决方案 “清除上次使用的搜索模式” 更容易记住 / 键入:

:let @/ = ""

潜在的弊端是它会在您的搜索记录中添加垃圾内容。

重新映射到我的. vimrc.local 文件中,既快捷又脏乱,但功能非常强大:

" Clear last search highlighting
map <Space> :noh<cr>
nnoremap <cr> :noh<CR><CR>:<backspace>

这样,在搜索后按Enter时,我便摆脱了命令行中显示的:noh

就像开始输入新命令一样, Backspace清除它并将焦点重新放到编辑器窗口中。

提出:noh:nohlsearch的答案(例如,Matt McMinn 的答案)对于暂时禁用搜索突出显示是正确的 - 如原始问题中所述。

我以为我会贡献一个在普通模式下有用的映射:

nnoremap <C-L> :nohlsearch<CR><C-L>

默认情况下,Vim 中的Ctrl L 会清除并重新绘制屏幕。许多命令行程序(大多数是使用GNU Readline 库的程序 ,例如 Bash)使用相同的组合键来清除屏幕。在后台运行的进程打印到终端,覆盖前台进程的某些部分的情况下,此功能很有用。

在重新绘制屏幕之前,此 “普通” 模式映射还清除了最近搜索词的突出显示。我发现这两个功能是相辅相成的,使用一个Ctrl L来同时执行两个操作而不是创建一个单独的映射来禁用搜索突出显示是很方便的。

注意:使用 noremap而不是map ,否则映射将是递归的。

提示:我通常将Caps Lock重新映射为Ctrl ,以便更轻松地键入此类组合键;执行此操作的详细信息取决于您选择的 OS / 窗口系统(对于此答案而言,该主题是不正确的)。以下两个技巧均包含有关将Caps Lock映射到Ctrl以及Esc 的信息

我通常将:noh映射到反斜杠键。要重新启用突出显示,只需按n ,它将再次突出显示。