在 vi(m) 中突出显示相同的字符串

在 vi(m) 中突出显示相同的字符串

Notepad++ 有一个功能我觉得非常有用,而且在其他地方找不到,那就是突出显示与当前选定的文本相同的其他文本。

vi(m) 是否有类似的可能性?(当然有。但我该如何实现呢?)也就是说,以下任何一个:

  • 如果我处于可视模式并选择了文本:突出显示相同的文本

  • 如果我已经搜索过/foo,则突出显示所有实例foo

  • 如果我位于字符串(一系列字符、数字或下划线)的开头,则突出显示所有其他匹配的字符串(首选解决方案)。

最后一个类似于右括号匹配,在我看来是最有用的。

编辑:对于我的第二个用例,我找到了一个解决方案(也就是说,Google 找到了它......):

:set hls

但其他的仍然存在。

答案1

对于你的第三个要求,

nnoremap , :mat Error "<C-R><C-W>"<CR>
将其放入 vimrc 文件中。
按逗号可突出显示光标处出现的所有单词。
此外,按 * 或 # 可突出显示光标处出现的所有字符串,hl搜索已设置
编辑:
对于你的第一个要求,
vnoremap <silent> , :<C-U>
  \let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
  \gvy:mat Error "<C-R><C-R>=substitute(
  \escape(@", '/".*$^~['), '_s+', '\_s\+', 'g')<CR>"<CR>
  \gV:call setreg('"', old_reg, old_regtype)<CR>
找到了这个这里. 根据您的需要进行修改。

答案2

:help hlsearch

 When there is a previous search pattern, highlight all its matches.

所以,把

set hlsearch

到你的 vimrc

答案3

对于门号 3,这就是 # 键的作用。它还会跳转到上一个此类字符串的开头。Asterisk(*) 的作用相反:跳转到下一个此类字符串的开头。

相关内容