在 Vim 中突出显示搜索结果但不突出替换结果?

8

我知道可以停止Vim在任何搜索时进行高亮,但是否有一种方法可以使它在普通搜索中进行高亮,例如不进行替换操作时?

我经常会突出显示一段文本,然后执行以下操作:

:s/^/#/

要注释掉整个代码块,但这会导致屏幕左侧出现一个丑陋的黄色条形,并且每次都需要使用:noh清除它。

我希望在普通的/searches中保持高亮显示。这可能吗?


不确定类似这样的东西是否可行,但也许可以将您的“搜索”高亮组更改为看起来像普通文本的样子,然后将“/”搜索键某种程度上重新映射到:match NewSearchGroup /searchterm/。我很乐意听听更好的方法。 - Tim
1
这并不回答你的问题,但是你真的应该使用tComment(或类似的注释插件)来注释文本块。你将能够使用动作进行注释,并且可以轻松地注释任何内容,包括XML。 - Daan Bakker
也许你可以使用这个答案来指引你朝着正确的方向前进... - jahroy
2个回答

5

这并不能完全回答你的问题,但对于我遇到同样问题时,它很有帮助:我添加了以下命令以轻松地在搜索或搜索替换后停用高亮显示。

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

(来自Vim清除上次搜索高亮显示)


你比我快了... 我本来要建议映射“ENTER”键。 - jahroy

3

我的解决方案:将这个放入你的vimrc文件中

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>

这个功能的作用是:

  1. 搜索总是启用高亮。
  2. 使用 Enter 可以关闭高亮,直到下一次搜索,但不会影响下一次替换。再次按下 Enter 将无法重新启用高亮。
  3. 使用 F4 可以关闭高亮,直到下一次搜索,但不会影响下一次替换。如果有上一次的搜索模式(搜索或替换),再次按下 F4 将切换高亮。

关于高亮的一些注释,通常没有很好的解释:
当选项 'hlsearch' 打开时,所有未来的搜索/替换都将打开 "高亮可见性"。当前的 "高亮可见性" 实际上不是您可以直接查询或独立设置的选项,但您可以使用命令 :nohlsearch 独立关闭高亮可见性(这与 :set nohlsearch 不同,因为下一次搜索将重新启用可见性)。

此外,每当运行命令 :set hlsearch 时,有两个效果:它设置选项,并使 vim 忘记您是否已经键入过 :nohlsearch。换句话说,更改 'hlsearch'(打开或关闭)将强制当前的 "高亮可见性" 逻辑匹配。


谢谢@Ein!你关于:set hlsearch的笔记帮助我解决了问题,让我在映射期间消除高亮,并重新启用它,而不会出现任何副作用,如匹配闪烁或错误消息。 - phatskat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接