在 Vim 中突出显示搜索而不是替换?

Posted

技术标签:

【中文标题】在 Vim 中突出显示搜索而不是替换?【英文标题】:Highlight searches in Vim but not substitutions? 【发布时间】:2013-01-29 13:48:34 【问题描述】:

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

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

:s/^/#/

注释掉整个块。但是我的屏幕左侧上下有一个难看的黄色条,我每次都必须:noh才能清除它。

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

【问题讨论】:

不确定这样的方法是否可行,但也许可以将“搜索”高亮组更改为看起来像普通文本,然后以某种方式将“/”搜索键重新映射为`:匹配 NewSearchGroup /searchterm/。不过,我也很想听听更好的方法。 这不能回答你的问题,但你应该真正使用tComment(或类似的评论插件)来评论文本块。您将能够使用动作进行评论,并且可以轻松地评论任何内容,包括 XML。 也许您可以使用this answer 指向正确的方向... 【参考方案1】:

这并不能完全回答您的问题,但对我来说也有同样的问题:我添加了这个命令,以便在搜索或搜索和替换后轻松停用突出显示

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

(来自Vim clear last search highlighting)

【讨论】:

你打败了我...我打算建议映射 ENTER 键。【参考方案2】:

我的解决方案:把它放在你的 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>

它的作用:

    搜索始终启用突出显示。 使用 Enter 关闭突出显示直到下一次搜索,但不是下一次替换。再次按 Enter 不会重新打开它们。 使用 F4 关闭突出显示直到下一次搜索,而不是下一次替换。再次按 F4 将切换上一个搜索模式的突出显示 --- 搜索或替换 --- 如果有的话。

一些从未真正解释清楚的重点说明:'hlsearch' 选项打开时,所有未来的搜索/替代都将打开"highlight visibility"。当前的"highlight visibility" 并不是真正可以直接查询或独立设置的选项,但可以使用命令:nohlsearch 独立关闭高亮可见性(这与:set nohlsearch 不同,因为下一次搜索将启用可见性再次)。

此外,每当你运行命令 :set hlsearch 时,都会有两种效果:它设置选项,并且如果你曾经输入过 :nohlsearch,它会让 vim 忘记。换句话说,更改'hlsearch'(打开或关闭)将强制当前的"highlight visibility" 在逻辑上匹配。

【讨论】:

谢谢@Ein!您关于 :set hlsearch helped me figure out 如何在映射期间摆脱突出显示并重新启用它而没有任何副作用(如匹配闪烁或错误消息)的注释。

以上是关于在 Vim 中突出显示搜索而不是替换?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 中类似 ViM 的搜索突出显示可能吗?

如何关闭 Vim 搜索突出显示

Vim:如何更改搜索命中和快速修复选择的突出显示颜色

有没有办法突出显示 (g)Vim 中的多个搜索?

如何使 vim 语法突出显示整行?

VIM,增量搜索:如何跳转到下一个结果并使其突出显示?