在Vim中标记选择

时间:2015-07-08 14:57:13

标签: vim plugins selection shortcut

我有时想到Vim中的标记选择功能,就像你输入时一样:

ma

在正常模式下,您可以随时随地点击:

`a

回到这个地方a。 我希望有类似的东西:

ma
visual 模式下

。这将保存您的视觉选择区域。然后你就可以在普通模式的任何地方输入:

<someHeader>a

使用此a选项返回视觉模式。

Vim中有这样的功能吗?或者是看起来像的扩展名?或者一种简单的方法来实现它?

3 个答案:

答案 0 :(得分:2)

我很确定没有任何方法可以为选择命名,类似于如何引用标记或寄存器。

我能想到的最接近的功能是gv命令进入可视模式,并且已经重新选择了 last 先前选择的块。我发现这比不止一次手动重新选择同一块文本要方便得多。

应该可以使用Vimscript编写一个函数,该函数将可视块的开头和结尾保存为可以重新用于重新选择Visual块的标记。我看看是否有可能使用Vimscript将<>标记保存为其他(较短暂的)标记,但我没有看到任何内容。

答案 1 :(得分:2)

我写过这个,我相信你要求的是:

function! VisualMark()
  call inputsave()
  let registers = input("m")
  call inputrestore()
  exec "normal! `<m" . registers[0]
  exec "normal! `>m" . registers[1]
endfun

function! GetVisualMark()
  call inputsave()
  let registers = input("`")
  call inputrestore()
  exec "normal! `" . registers[0]
  if strlen(registers) > 1
    exec "normal! v`" . registers[1]
  endif
endfun

vnoremap m <esc>:call VisualMark()<cr>
nnoremap ` :call GetVisualMark()<cr>
除了仅在可视模式下,它们的行为方式应与常规标记相同,并且它们都需要两个参数。

首先,为了保存一个可视选择的区域,在选择了块的可视模式下,像往常一样点击m键。然后它会让你输入更多的文本......这里函数将需要2个字符,这两个字符是开始和结束标记将保存到的两个寄存器...所以例如在可视模式下输入mab然后按Enter键(我无法找到一种方法让它在没有输入的情况下工作),会在块的开头为寄存器a创建一个标记,而b将是块的结束。

要在视觉上重新选择块,请转到可视模式并执行与常规标​​记相同的`...这也将需要两个字符

修改

我认为我的实施更好。在我拥有它之前,为了恢复视觉选择的块你必须处于可视模式,然后点击反引号(用于普通标记的相同按钮)按钮,然后是2个寄存器。现在你在正常模式下执行...这意味着现在使用反函数的默认使用函数,但是函数现在检查你提供的寄存器数量...所以如果你只使用一个寄存器,它只会带你回到那一个。如果你提供2个寄存器,那么它会直观地选择它们......如果你提供的数量超过2个,它只会使用前2个。

输入键仍然需要输入您的选择。无论如何,使用新的实现方式可能更好。

对于那些想要查看或使用旧实现的人来说,就是这样:

function! VisualMark()
  call inputsave()
  let registers = input("m")
  call inputrestore()
  exec "normal! `<m" . registers[0]
  exec "normal! `>m" . registers[1]
endfun

function! GetVisualMark()
  call inputsave()
  let registers = input("`")
  call inputrestore()
  exec "normal! `" . registers[0]
  exec "normal! v`" . registers[1]
endfun

vnoremap m <esc>:call VisualMark()<cr>
vnoremap ` <esc>:call GetVisualMark()<cr>

答案 2 :(得分:1)

以下是Steven Hall的类型解决方案,以及视觉标记不需要覆盖常规寄存器所需的一些修改。

https://github.com/iago-lito/vim-visualMarks

这是一个小型的vimScript,可以通过在 visual 模式下键入标记视觉选择的区域:

ma

(对于标记a

然后通过在正常模式下输入

,从任何地方检索它
<a

它仍然需要一些基本的改进,但现在任何人都可以尝试,改进和分享。感谢Steven推出了这个过程:)