我有时会梦见Vim中有一个标记选择功能,就像您键入:
ma在正常模式下,您可以从任何地方点击:
`a回到这个地方a。我希望有这样的东西:
ma在视觉模式下。这将节省您的视觉选择区域。然后你就可以在正常模式的任何地方输入:
<someHeader>a若要与此a选择一起返回可视模式,请执行以下操作。
在Vim里有这样的特征吗?或者是一个看起来像的分机?还是一种简单的方法来实现它?
发布于 2015-07-09 07:14:40
这里是Steven Hall的友好解决方案,还有一些我需要的修改,以便视觉标记不覆盖常规寄存器。
https://github.com/iago-lito/vim-visualMarks
它是一个小vimScript,允许您在可视模式下通过键入来标记可视选定的区域:
ma(马克a)
然后在正常模式下,通过键入从任何地方检索它:
<a它仍然需要一些基本的改进,但现在任何人都可以尝试、改进和分享。感谢史蒂文启动了这一进程:)
发布于 2015-07-08 15:06:32
我相当肯定,没有任何方法来命名选择类似于如何标记或寄存器可以被引用。
我能想到的最接近的特性是gv命令,它进入视觉模式时,上次选择的块已经重新选择了。我发现这比手动重新选择同一块文本要方便得多。
应该可以使用Vimscript编写函数,该函数将视觉块的开始和结束保存为可以重新使用的标记来重新选择一个可视化块。我查看了一下是否可以使用Vimscript将<和>标记保存为其他(不那么短暂的)标记,但我什么也没看到。
发布于 2015-07-08 20:32:42
我写了这封信,我相信这是你想要的:
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键,就像通常情况下一样。它会让你输入更多的文字..。在这里,函数需要两个字符,这两个寄存器将开始标记和结束标记保存到.例如,在视觉模式下输入mab,然后按enter (我想不出一种方法使它在没有enter的情况下工作),会在寄存器a中为块的开头创建一个标记,而b将是块的结束。
若要在视觉上重新选择块,请进入可视模式并执行与常规标记相同的`.这也需要两个字符
编辑
在我看来,我已使执行工作更好。在我使用它之前,为了返回视觉选择的块,您必须处于可视模式,然后单击回勾(与正常标记相同的按钮)按钮,然后是2个寄存器。现在你用正常的方式..。这意味着默认使用回勾符现在使用此函数,但该函数现在检查提供了多少寄存器.所以,如果你只使用一个寄存器,它只会带你回到那个。如果你提供2个寄存器,那么它会直观地选择它们.如果你提供超过2,它将只使用前2。
尽管如此,在选择中仍然需要输入enter键。无论如何,采用新的实现方式可能会更好。
对于那些想要看到或使用旧实现的人来说,这就是:
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>https://stackoverflow.com/questions/31296394
复制相似问题