在 Vim 中标记选择
Mark selections in Vim
我有时梦想 Vim 中的标记选择功能,就像您键入时一样:
ma
在普通模式下,你可以从任何地方点击:
`a
回到这个地方a
。
我希望有这样的东西:
ma
在视觉模式下。这将保存您视觉选择的区域。然后你只需在正常模式下的任何地方输入:
<someHeader>a
使用此 a
选择返回可视模式。
Vim有这样的功能吗?或者看起来像的扩展?或者一个简单的实现方法?
我很确定没有任何方法可以像引用标记或寄存器那样命名选择。
我能想到的最接近的功能是 gv
命令,它进入可视化模式,last 先前选择的块已经重新选择。我发现这比必须多次手动重新选择同一文本块要方便得多。
应该可以使用 Vimscript 编写一个函数,将可视块的开始和结束保存为可以重新用于重新选择可视块的标记。我看了一下是否可以使用 Vimscript 将 <
和 >
标记保存为其他(不太短暂的)标记,但我没有看到任何东西。
我已经写了这个,我相信这就是你想要的:
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>
除了在可视模式下,它们的行为应该与常规标记相同,并且它们都需要两个参数。
首先,要保存可视化 selected 区域,在带有方块 selected 的可视化模式下,像往常一样按 m 键。然后它会让你输入更多的文本……这里的函数需要 2 个字符,这是两个寄存器,开始和结束标记将被保存到……所以例如在可视模式下输入 mab 然后按回车(我想不出一种方法让它在没有输入的情况下工作),会在寄存器 a 中为块的开头创建一个标记,而 b 将是块的结尾。
要在视觉上重新select 块,进入视觉模式并执行与常规标记相同的 `...这也需要两个字符
编辑:
我认为我已经改进了实施。在我拥有它之前,为了带回可视化 selected 块,您必须处于可视化模式,然后点击反引号(与用于普通标记的按钮相同)按钮,然后点击 2 个寄存器。现在你在正常模式下做......这意味着默认使用反引号现在使用这个函数,但是这个函数现在检查你提供了多少个寄存器......所以如果你只使用一个寄存器,它只会带你回到那个。如果您提供 2 个寄存器,那么它会在视觉上 select 它们...如果您提供超过 2 个,它将只使用前 2 个。
虽然输入 selection 仍然需要回车键。无论如何,使用新的实现方式可能会更好。
对于那些想要查看或使用旧实现的人来说,就是这样:
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://github.com/iago-lito/vim-visualMarks
它是一个小型 vimScript,允许在 visual 模式下通过键入来标记视觉选择区域:
ma
(标记a
)
然后在正常模式下通过在任何地方输入:
<a
它仍然需要一些基本的改进,但现在任何人都可以尝试、改进和分享。感谢 Steven 启动了这个过程:)
我有时梦想 Vim 中的标记选择功能,就像您键入时一样:
ma
在普通模式下,你可以从任何地方点击:
`a
回到这个地方a
。
我希望有这样的东西:
ma
在视觉模式下。这将保存您视觉选择的区域。然后你只需在正常模式下的任何地方输入:
<someHeader>a
使用此 a
选择返回可视模式。
Vim有这样的功能吗?或者看起来像的扩展?或者一个简单的实现方法?
我很确定没有任何方法可以像引用标记或寄存器那样命名选择。
我能想到的最接近的功能是 gv
命令,它进入可视化模式,last 先前选择的块已经重新选择。我发现这比必须多次手动重新选择同一文本块要方便得多。
应该可以使用 Vimscript 编写一个函数,将可视块的开始和结束保存为可以重新用于重新选择可视块的标记。我看了一下是否可以使用 Vimscript 将 <
和 >
标记保存为其他(不太短暂的)标记,但我没有看到任何东西。
我已经写了这个,我相信这就是你想要的:
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>
除了在可视模式下,它们的行为应该与常规标记相同,并且它们都需要两个参数。
首先,要保存可视化 selected 区域,在带有方块 selected 的可视化模式下,像往常一样按 m 键。然后它会让你输入更多的文本……这里的函数需要 2 个字符,这是两个寄存器,开始和结束标记将被保存到……所以例如在可视模式下输入 mab 然后按回车(我想不出一种方法让它在没有输入的情况下工作),会在寄存器 a 中为块的开头创建一个标记,而 b 将是块的结尾。
要在视觉上重新select 块,进入视觉模式并执行与常规标记相同的 `...这也需要两个字符
编辑:
我认为我已经改进了实施。在我拥有它之前,为了带回可视化 selected 块,您必须处于可视化模式,然后点击反引号(与用于普通标记的按钮相同)按钮,然后点击 2 个寄存器。现在你在正常模式下做......这意味着默认使用反引号现在使用这个函数,但是这个函数现在检查你提供了多少个寄存器......所以如果你只使用一个寄存器,它只会带你回到那个。如果您提供 2 个寄存器,那么它会在视觉上 select 它们...如果您提供超过 2 个,它将只使用前 2 个。
虽然输入 selection 仍然需要回车键。无论如何,使用新的实现方式可能会更好。
对于那些想要查看或使用旧实现的人来说,就是这样:
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://github.com/iago-lito/vim-visualMarks
它是一个小型 vimScript,允许在 visual 模式下通过键入来标记视觉选择区域:
ma
(标记a
)
然后在正常模式下通过在任何地方输入:
<a
它仍然需要一些基本的改进,但现在任何人都可以尝试、改进和分享。感谢 Steven 启动了这个过程:)