每当我粘贴文本时,vim总是告诉我在左下方粘贴了多少行。例如,它说“还有6条线”。
是否可以以编程方式访问该号码?
或者,访问给定寄存器的总线?
我将使用该数字来计算我应该执行多少个宏。例如。 vim说“6行”,然后我输入6 @ q。
答案 0 :(得分:2)
计算标记'[
和']
(first and last lines of yanked text)之间的差异:
:echo line("']") - line("'[") + 1
请注意,这些标记适用于任何变化,不仅仅是猛拉,所以在yanking之后立即使用表达式。
答案 1 :(得分:1)
fun! MacroOverChange(macroname)
let l:how_many = line("']") - line("'[") + 1
execute "normal! ". l:how_many . "@" . a:macroname
endfun
:call MacroOverChange("a")
com -nargs=1 Mover :call MacroOverChange(<f-args>)
nnoremap <leader>m :Mover<space>
命令Mover(“Macro Over”的助记符)接受参数,例如,如果你想运行Mover宏'a',只需输入:
:Mover a
地图允许您输入<leader>m
并获取以下内容
:Mover |
其中|是光标点
一个更好的函数,它运行在最后一个更改/抽出的块上。 这个功能的优点是它完全在最后一个被拉/更改的块上运行
fun! RunMacroOver(macroname)
execute "'[,']normal @". a:macroname
endfun
com -nargs=1 Rover :call RunMacroOver(<f-args>)
nnoremap <leader>r :Rover<space>
为了避免在系统中创建文件以测试这些功能,请在yout浏览器中复制它们并运行:
:@+
如果您将这些行粘贴到vim缓冲区中,则可以选择一个段落,例如yank,它会将复制的文本放入默认寄存器@"
中,您可以使这些行处于活动状态:{{1} }
OBS:请避免使用:@"