vim:获取上次粘贴的文本总行数

时间:2017-09-23 10:20:24

标签: vim

每当我粘贴文本时,vim总是告诉我在左下方粘贴了多少行。例如,它说“还有6条线”。

是否可以以编程方式访问该号码?

或者,访问给定寄存器的总线?

我将使用该数字来计算我应该执行多少个宏。例如。 vim说“6行”,然后我输入6 @ q。

2 个答案:

答案 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:请避免使用:@"

复制行