【发布时间】:2015-10-21 16:56:12
【问题描述】:
如何在 vim 中突出显示光标下的单词。
目前我通过获取光标下的单词然后按*来做到这一点。
当然,这确实会突出显示文本,但光标会移动到文件中找到的下一个单词(如果该单词多次存在)。但是,我希望光标停留在同一个单词上,同时突出显示它。
【问题讨论】:
如何在 vim 中突出显示光标下的单词。
目前我通过获取光标下的单词然后按*来做到这一点。
当然,这确实会突出显示文本,但光标会移动到文件中找到的下一个单词(如果该单词多次存在)。但是,我希望光标停留在同一个单词上,同时突出显示它。
【问题讨论】:
您可以尝试Mark plugin,因为它允许同时以不同颜色突出显示多个单词。它非常稳定、有据可查且易于使用。
可以直接或通过正则表达式选择要突出显示的单词,并且该插件提供了一些机制来在标记的单词/表达式的出现之间跳转。
【讨论】:
假设您有hlsearch -- 鉴于您对 * 命令的描述,我很确定您这样做了 -- 您可以创建一个设置搜索寄存器的映射:
nnoremap <leader>* :<C-u>let @/ = expand('<cword>')<cr>
使用您的映射后,您可以像任何其他搜索一样使用 n/N 跳转到下一个/上一个结果。
编辑:
既然你让我描述映射在做什么,我会分解它。
nnoremap 表示创建非递归映射。<leader>* 是映射的键序列。默认情况下,<leader> 是 \,因此实际映射是 \ 后跟 *。您可以将其更改为您想要的任何内容,我只是以它为例。:<C-u> 在这种情况下可能没有用,但我发现这是一个好习惯。它的作用是保证您将要运行的命令没有添加范围。let @/ = 正在设置/(搜索)寄存器。当您进行正常搜索时,这是存储最后搜索的字符串的位置。我们通过映射来处理这一点,以利用内置的 hlsearch 和 n/N 功能。expand('<cword>') 正在抓取光标下的单词。<cr> 只是模拟您按下 Enter 以实际完成命令。【讨论】:
<>s 中的字符串由 vim 解释,它们不是占位符。
"By default <leader> is /" -- 我想你的意思是\(反斜杠)
我添加了这个功能,它允许您通过按<leader> 1-6切换最多6个不同颜色的单词突出显示,<leader> -0将清除所有突出显示。
https://github.com/sk1418/myConf/blob/master/common/.vimrc#L729
最初的想法来自 sjl。
【讨论】:
我在 .vimrc 中这样做了,它使用 F3 突出显示光标下的单词:
nmap <F3> /<c-r>=expand("<cword>")<CR><CR>N
'N' 将返回到最后一个位置
【讨论】: