通过vim选择循环和/或突出显示

时间:2014-06-13 15:34:04

标签: vim sublimetext2

我所想到的功能有点受到我非常喜欢崇高文字的功能的启发。

在崇高文本中,如果您选择一系列字符,它会自动在其周围放置一个小框(以区别于您刚刚突出显示的单词)。对我来说,这非常有用,因为我可以更快地查看和查找代码的特定内容。

拥有与我的vim环境类似的东西真是太棒了。它不必与完全与sublime中的那个相同,但如果它尽可能相似,加上额外的功能,可以轻松循环使用相似的单词,那就太棒了。

目前,我正在做的是突出显示我想要的工作,然后手动将其键入搜索命令/。如果我可以在视觉模式中突出显示它然后在视觉模式中使用不同颜色突出显示当前屏幕上的相似单词然后快速键快捷键将会更好如果我想这样做,骑自行车穿过它们。

我不确定是否存在插件或已经存在的东西,但这会很酷!理想情况下,我想知道vimrc文件的命令/更改的详细信息,以便我能够最大程度地控制此功能,并能够根据需要自定义它。

2 个答案:

答案 0 :(得分:3)

您可以通过启用hlsearch选项获取要查找的突出显示:

:set hlsearch

它将突出显示最后一个搜索模式的每一个匹配项,从而在所有以下命令(及其亲属)之后工作:

/foo<CR>
?bar<CR>
:s/fizz/buzz/g
*    
#

您可以使用n在搜索方向上跳转到下一个匹配项,并N向相反方向跳转。

要突出显示当前单词的所有位置“不”移动光标,您只需执行以下操作:

*N

或:

*``

跳转到下一个出现并立即跳回。

为视觉选择的文本做同样的事情有点棘手,但仍然可能......

  • 通过轻量级插件visualstarThe Search Party
  • 或您~/.vimrc中的一小部分原始vimscript:

    " this function cleans up the search pattern
    function! GetVisualSelection()
      let old_reg = @v
      normal! gv"vy
      let raw_search = @v
      let @v = old_reg
      return substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
    endfunction
    
    " map * and # in visual mode so that they do the same as *N and #N in normal mode
    xnoremap * :<C-u>/<C-r>=GetVisualSelection()<CR><CR>N
    xnoremap # :<C-u>?<C-r>=GetVisualSelection()<CR><CR>N
    

答案 1 :(得分:1)

我的SearchHighlighting plugin更改*命令,以便只切换当前单词的突出显示,而不会移动到下一个匹配项(可以按n)或通过一个计数)。这也可以在视觉模式下使用选择。我觉得这非常方便突出所有比赛。

还有一种模式可以自动突出显示当前的单词/选择,就像许多IDE提供的一样。

其他插件

  • 如果您想要更长久的突出显示,与搜索分开,Mark plugin会提供。{/ li>
  • 要了解匹配数量的方向(不突出显示),我有SearchPosition plugin