在Vim中进行搜索后,我突出显示了所有事件。我怎样才能禁用它?我现在再次搜索一些找不到的胡言乱语。
有没有一种方法可以暂时禁用高亮显示,然后在需要时再次启用?
在Vim中进行搜索后,我突出显示了所有事件。我怎样才能禁用它?我现在再次搜索一些找不到的胡言乱语。
有没有一种方法可以暂时禁用高亮显示,然后在需要时再次启用?
当前回答
nnoremap silent <cr> :noh<cr><cr>
这样我就可以在搜索后按回车键时,去掉命令行中显示的noh。
:就像开始输入一个新命令,Backspace将其清除并将焦点放回编辑器窗口。
其他回答
为这两种行为定义映射,因为它们都很有用!
完全清除搜索缓冲区(例如,按n进行下一次匹配将不会继续搜索)保留搜索缓冲区,并切换突出显示搜索结果的开/关/开/。。。(例如,按n将继续搜索,但突出显示将基于切换的当前状态)
" use double-Esc to completely clear the search buffer
nnoremap <silent> <Esc><Esc> :let @/ = ""<CR>
" use space to retain the search buffer and toggle highlighting off/on
nnoremap <silent> <Space> :set hlsearch!<CR>
提出:noh或:nohlsearch(例如,Matt McMinn的)的答案对于暂时禁用搜索突出显示是正确的——正如最初的问题中所问的那样。
我想我会贡献一个在普通模式下有用的映射:
nnoremap <C-L> :nohlsearch<CR><C-L>
默认情况下,Vim中的CtrlL会清除并重新绘制屏幕。许多命令行程序(大多数是使用GNU Readline库的程序,如Bash)使用相同的组合键来清除屏幕。此功能在后台运行的进程打印到终端,覆盖前台进程的部分时非常有用。
此正常模式映射也会在重绘屏幕之前清除最近搜索词的突出显示。我发现这两个功能相辅相成,同时使用一个CtrlL来执行两个操作,而不是创建一个单独的映射来禁用搜索突出显示,这很方便。
注意:使用noremap而不是map,否则映射将是递归的。
提示:我通常将Caps Lock重新映射到Ctrl,以便更容易键入这样的组合键;这样做的细节取决于您对OS/窗口系统的选择(这个答案与主题无关)。以下两个提示都包含有关将Caps Lock映射到Ctrl和Esc的信息:
在XWindows中,地图大写锁定为转义在Windows中,地图大写锁定为转义
我最初的解决方案(下图)既肮脏又浪费。我现在使用:否
像Vim中的许多功能一样,正确的方法通常不容易发现。
--
(不要这样做)
搜索不太可能的字符序列(将主行上的键混合):
/;alskdjf;
这在vim和更少的情况下工作,并且比@ShaunBouckaert逻辑上更清晰的解决方案“清除上次使用的搜索模式”更容易记住/键入:
:let@/=“”
一个潜在的缺点是,它会将垃圾添加到您的搜索历史记录中。
这将在不活动的更新时间毫秒后清除搜索突出显示。
更新时间默认为4000ms或4s,但我将我的设置为10s。需要注意的是,updatetime不仅仅是这样,所以在更改之前请阅读文档。
function! SearchHlClear()
let @/ = ''
endfunction
augroup searchhighlight
autocmd!
autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END
我也不喜欢。我觉得进去很累:不。。。所以我把下面的映射放在.vimrc中
noremap <C-_> :nohl<cr>:<backspace>
第一位(:nohl<cr>)清除突出显示;第二位(:<backspace>)是清理命令行的技巧。搜索仍在后台,因此如果您只需单击n,它将重新突出显示并带您进入下一次搜索。