如何清除当前文档中的突出显示单词(例如,在搜索单词之后)?


61

当您在文件中搜索类似于的单词时/console.log,的所有实例都会console.log突出显示。

当您不再对这些内容感兴趣时,突出显示内容可能会分散您的注意力。我目前的消除突出显示的策略是执行类似的操作/asntehua。是否有适当的方法来删除突出显示的单词?


2
没有比这更快的键入内容了/skldafjlksjdf;)
Shahbaz

1
将以下内容添加到您的.vimrc:中:nnoremap <silent> <CR> :nohlsearch<CR><CR>。在命令模式下按回车键,突出显示消失。
nilon

Answers:


47

作为替代:noh,我喜欢:let @/=""映射到键盘快捷键。

不同的是,:noh离开了搜索词在搜索寄存器,所以nN在正常模式下恢复通过跳转到下一个/上比赛并重新高亮搜索。使用:let @/="",另一方面,导致邮件E25: No previous regular expression离开你的光标它在哪里,这是,如果你还不知道特别方便ctrl- o但和不小心撞到了n

也可以使用其他方式。要使vim突出显示某些文本而不跳转到该文本,您可以:let @/="some text"

在这些表达式中,@允许您引用一个寄存器,@ /是保存最后一个搜索模式的寄存器。


31

只需输入

:noh<cr>

(此处<cr>表示回车,即Enter。)此命令的完整非缩写版本为:nohlsearch

为了方便起见,您可以使用以下映射

nnoremap <Leader><space> :noh<cr>

在你的.vimrc。由于我的领导者是太空人,因此我只需轻按两次空格即可清除突出显示。(默认情况下,<Leader>设置为\

另一个流行的选择是将其绑定到Ctrl+ L,因为这或多或少是“重新绘制的终端屏幕”的默认设置,这大致就是您正在执行的操作:

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

这具有的副作用重绘终端屏幕,这可能是缓慢的,如果你的终端连接速度很慢(这是非常罕见的,这些天)。
注意:如果您使用的是tpope / vim-sensible,则它已经提供了<C-l>上面列出的映射。


21

永久禁用搜索突出显示

每当您使用进行搜索时,匹配项都不会突出显示 /

:set nohlsearch

清除高亮显示,直到下一次搜索

:noh

:nohlsearch(清除直到n或者N被按下或者执行新鲜搜索)


按下时清除高亮显示 ESC

nnoremap <esc> :noh<return><esc>

在按下另一个键或自定义地图时清除突出显示的内容

  • 按下时清除高光\(反斜杠)

    nnoremap \ :noh<return>
    
  • 击中ESC两次时的亮点

    nnoremap <esc><esc> :noh<return>
    

我已添加nnoremap <esc> :noh<return><esc>到我的vimrc收藏夹,但无法正常工作。我已经计划jk要逃跑,那可能是为什么吗?
mbigras

到底是怎么回事?也许您禁用了ESC钥匙?
Sheharyar'3

jk不会关闭突出显示的文本(但仍可作为Esc)。Esc在键盘的左上方按我的按钮不会关闭突出显示的文本。
mbigras

因此,您可以在那里找到答案。将您的jk地图放在地图下方,ESC并确保您使用的是简单的map而不是noremap
Sheharyar,2017年

重新映射转义符可能会导致箭头键出现问题,并且我假设其他情况下也会使用转义符。vi.stackexchange.com/questions/11144/...
罗布·莫舍

2

在为〜/ vimrc中的快捷方式尝试了几种建议的解决方案之后,我决定简单地添加nmap <esc><esc> :noh<return>它。两次转义可防止干扰箭头键的功能。如果您处于插入模式,则必须进行三次转义。这是快速执行且容易记住的。


2

我在.vimrc中添加了一个autocmd,以便在您进入插入模式时立即删除突出显示。

 autocmd InsertEnter * :let @/=""

2
使用nohl代替let @/=""会是更好的方法,因为那样您就不会破坏当前的搜索了。
jamessan

@jamessan它可以与:let @/=""命令一起使用,但是autocmd InsertEnter * :noh由于某种原因而不起作用,为什么?
Tobek

1
实际上,我找到了原因:根据文档“无法在自动命令中使用“:nohlsearch”关闭搜索突出显示“-原因的详细信息:vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
tobek

1

如果您不想在搜索后不突出显示,可以使用以下方法(更好):

:set nohls

或此(更糟):

:hi Search NONE

1

输入时:help incsearch,我在手册中发现了以下内容:

augroup vimrc-incsearch-highlight
  autocmd!
  autocmd CmdlineEnter /,\? :set hlsearch
  autocmd CmdlineLeave /,\? :set nohlsearch
augroup END

我之所以辞职,是因为我尝试过的其他解决方案都不是完美的,并且可以说,这种解决方案“直奔马口”。它突出显示当前窗口中的所有搜索匹配项。


1
/asdfasdf

这样做的好处是您不必输入准确的名称。缺点是,在4096字节的文件中大约有1:68719476736的机会不起作用,并且光标会跳到另一个位置。对于较大的文件,此机会增加。


1
欢迎使用vi SE!我认为该字符串asdfasdf很特殊,因为它在实际文件中比随机选择的8字节序列更经常出现。因此,机会要高得多。:-)
user259412

0

我不认为完全删除hls并不是一件好事,在我看来,如何轻松启用或禁用创建快捷键(布尔值)->

" to reselect use gv in normal mode
nnoremap <S-F11> <ESC>:set hls!<cr>
inoremap <S-F11> <C-o>:set hls!<cr>
vnoremap <S-F11> <ESC>:set hls!<cr> <bar> gv

魔术的发生是因为!设置的末尾有“ ”


0

我发现很少要突出显示对我来说是很少见的,当我需要突出显示时只是短暂的一刻。我的解决方案是

nnoremap <Leader>/ set hls!<CR>

这将在您按下时启用突出显示,\/如果再次按下则再次禁用。在极少数情况下,您可以在需要时轻松访问突出显示。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.