在 Vim 中进行搜索后,所有出现的内容都会被高亮显示。如何关闭这个功能?我现在搜索一些无意义的内容以使其取消高亮显示。
是否有一种方法可以暂时禁用高亮显示,并在需要时重新启用它?
是否有一种方法可以暂时禁用高亮显示,并在需要时重新启用它?
在updatetime
毫秒内没有任何操作,搜索高亮将被清除。
updatetime
默认为4000ms或4s,但我将其设置为10s。需要注意的是,updatetime
不仅仅是执行这个功能,所以在更改之前请阅读文档。
function! SearchHlClear()
let @/ = ''
endfunction
augroup searchhighlight
autocmd!
autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END
如果您想快速启用/禁用高亮功能,可以将一个按键映射到该功能。
" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>
只需将上述片段放入您的 .vimrc 文件中即可。
这是我用单个按键显示和隐藏搜索高亮的最方便的方式
有关更多信息,请查阅文档http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches
结合前两个答案的另一种解决方案:
"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>
@/ =""
清除搜索寄存器会导致n
无法获取您的搜索结果。我更喜欢使用:noh
,它可以将先前的搜索结果保留在寄存器中以供重复使用。您可以使用nnoremap <F3>:noh<CR>
将<F3>
绑定到该命令上。 - jbyler您可以使用:noremap来开启/关闭搜索结果高亮,像这样:
:noremap <F3> :set hls! hls?<CR>
我在~/.vimrc
文件中使用以下内容:
nnoremap <Leader><space> :noh<Enter>
这使得清除当前高亮搜索非常简单快捷。我的领袖键映射到\
,所以这使得动作非常容易用右手小指和拇指完成。
我也不喜欢这个。每次输入:nohl
都感到很烦 ... 所以我在我的.vimrc
中添加了以下映射:
noremap <C-_> :nohl<cr>:<backspace>
第一部分(:nohl<cr>
)是清除高亮显示的命令;第二部分(:<backspace>
)是一个技巧,用来“清洗”命令行。搜索仍然在后台运行,所以如果你只是按下n
,它就会重新高亮显示并带你到下一个匹配项。
" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>
根据@baruch-even的回答,在正常模式下,你可以通过双击ESC键来删除搜索词:
nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[
<esc>
效果很好,但是在终端中运行vim时,会导致箭头键和其他ESC编码键出现严重问题。在~/.vimrc
中不要直接使用它,而是用if has('gui_running')
... end
包装它。还要考虑添加<silent>
以避免在状态栏中闪烁:noh
命令。 - jbylern
键以查找下一个匹配项时不会恢复搜索)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>
hjkl
的箭头键 :) - Eric<silent>
前加上 <nowait>
。 - john c. j.<esc>
键通常会在退出插入模式时导致令人讨厌的延迟。请参见 https://vi.stackexchange.com/questions/16148/slow-vim-escape-from-insert-mode。 - apostl3pol不建议使用nohlsearch的任何解决方案,那么下一个搜索怎么办?最好的答案是通过让@/ = ""来创建,但我不喜欢在Mac上通过功能键映射,所以这是我的方法:
let mapleader=','
let g:mapleader=','
nnoremap <leader>cs :let @/ = ""<cr>
nnoremap <esc> :noh<return><esc>
在 GUI Vim 中能够很好地解决问题,但是在终端中运行 Vim 时,会导致箭头键和其他 ESC 编码键出现问题。如果不在~/.vimrc
中加入if has('gui_running')
...end
的包装,请勿将其放入其中。 - jbyler