我有时想到Vim中的标记选择功能,就像你输入时一样:
ma
在正常模式下,您可以随时随地点击:
`a
回到这个地方a
。
我希望有类似的东西:
ma
在 visual 模式下。这将保存您的视觉选择区域。然后你就可以在普通模式的任何地方输入:
<someHeader>a
使用此a
选项返回视觉模式。
Vim中有这样的功能吗?或者是看起来像的扩展名?或者一种简单的方法来实现它?
答案 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推出了这个过程:)