突出显示搜索词而不移动光标


15

使用Vim,有时我会盯着一段源代码一段时间,然后突然想在屏幕上弹出一些变量。这很简单:/<var>突出显示所有内容。我的问题是搜索经常会移动我的窗口,因此我不会在同一位置查看源代码。即使只移动了几行,它仍然让我失望,因为我需要花几秒钟来弄清事情的发展方向。

是否可以在不将光标移至下一个匹配项的情况下突出显示搜索词?


2
不完全是一个答案,但是我只用两个反引号(``)跳到了我之前的位置。
Izkata 2012年

Answers:


1

http://vim.wikia.com/wiki/VimTip1572

如果您使用了此插件,则只需启用该功能

\ m

然后使用NumPad键为该单词分配颜色,而无需移动光标。

1个

您可以一次对许多不同的单词使用多种不同的突出显示,也可以根据需要使用更复杂的搜索模式。


我喜欢这个插件!
安德鲁·伍德

15

skyblue的答案显示了如何使用常规搜索突出显示来完成所需内容的思想的核心。

我通过制作与*命令类似的键绑定来扩展了该技术,但实际上并未移至下一个匹配项。

我要感谢garyjohn指出与的词选择expand()等效*的词(以避免使用*自身并恢复视图)。这样可以充分简化代码,使其可以直接进入映射(使用函数可以省去)。我还添加了匹配部分单词(例如g*)的映射 。

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>

1
您可以normal *通过替换let @/ = @/为来避免调用winsaveview(),winrestview()和let @/ = expand("<cword>")
garyjohn

@garyjohn:是的,这样更好。我不确定是否有与通过进行的“单词”选择等效的操作*,但是<cword>是。
克里斯·约翰森

13

您也可以将搜索寄存器设置为要匹配的变量。

首先,确保搜索突出显示功能已打开:

:set hlsearch

然后,您可以使用以下方法设置搜索寄存器:

:let @/="variable"

这将突出显示所有出现的变量,而无需跳到下一个匹配项。

有关更多信息,请参见 :help @/


7

一种方法是使用:match命令,例如

:match Question '^R^W'

这将使用“问题突出显示”组突出显示光标下方的单词。我经常使用“问题”组,因为在我的终端上它是一个漂亮的绿色。要查看可用的突出显示组,请执行

:hi

^R^W是按Ctrl-R和Ctrl-W,分别和由光标下的单词被替换。看到

:help c_CTRL-R_CTRL-W

有关更多信息。看到

:help :match

有关:match命令的更多信息。要清除该突出显示,只需执行

:match

没有参数。


1

此外:

 :set hlsearch

您可能要:

 : set noincsearch

0

*我们类似:

[I ............................. it show where the word under the cursor appears

值得一看:h [I。在那里,我们找到了一些与您的需求有关的有趣的东西。

在stackoverflow上有一个类似的问题,我在这里回答(更加完整)

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.