突出显示Vim中的搜索但不是替换?


Highlight searches in Vim but not substitutions?

我知道有可能阻止vim在任何搜索中突出显示,但是有没有一种方法可以让它在常规搜索中突出显示,但不能例如替换?

我通常会突出显示一块文本,然后执行如下操作:

1
:s/^/#/

对整个街区进行评论。但是我的屏幕左侧有一个丑陋的黄色条,我每次都要清除它。

我希望突出显示保留在常规/搜索中。这有可能吗?


这并不能完全回答您的问题,但对于我来说,有一个相同的问题是有帮助的:我添加了这个命令,以便在搜索或搜索并替换后轻松取消突出显示。

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

(从VIM清除上次搜索突出显示)


我的解决方案:把这个放在你的VIMRC文件中

1
2
3
4
5
6
7
8
9
set nohlsearch

noremap * :set hlsearch<CR>:nohlsearch<CR>*
noremap / :set hlsearch<CR>:nohlsearch<CR>/
noremap ? :set hlsearch<CR>:nohlsearch<CR>?

nnoremap <F4> :set invhlsearch<CR>
inoremap <F4> <ESC>:set invhlsearch<CR>gi
nnoremap <CR> :set nohlsearch<CR>

它做什么:

  • 搜索始终启用突出显示。
  • 使用enter关闭突出显示,直到下一次搜索,但不是下一次替换。但是,再次按下enter将不会重新打开它们。
  • 使用f4关闭突出显示,直到下一次搜索,但不是下一次替换。再次按f4将切换上一个搜索模式(搜索或替换)的突出显示(如果有)。
  • 一些关于突出部分的注释没有很好地解释:当'hlsearch'选项打开时,所有未来的搜索/替换将打开"highlight visibility"。当前的"highlight visibility"实际上不是一个可以直接查询或独立设置的选项,但是可以使用命令:nohlsearch独立关闭突出显示可见性(这与:set nohlsearch不同,因为下一次搜索将再次启用可见性)。

    此外,每当运行命令:set hlsearch时,有两种效果:它设置选项,如果您键入:nohlsearch的话,它会使vim忘记。换句话说,更改'hlsearch'(开或关)将强制当前"highlight visibility"逻辑匹配。