Vim 复制索引递增的代码块
我有以下功能声明: function f1(s) real f1,s f1 = 1/s endVim 复制索引递增的代码块,vim,Vim,我有以下功能声明: function f1(s) real f1,s f1 = 1/s end 我目前的方法是以可视模式复制块,粘贴几次,然后手动重命名函数。我想知道如何使用Vim更快地实现这一点。谢谢。您可以随时使用录音(请参见:h录音)。假设函数前后都有一个空行,而函数之间没有空行 // empty line here, cursor here function f1(s) real f1,s f1 = 1/s end // empty line here 将光标放在上面的空行上,对任意寄
我目前的方法是以可视模式复制块,粘贴几次,然后手动重命名函数。我想知道如何使用Vim更快地实现这一点。谢谢。您可以随时使用录音(请参见
:h录音
)。假设函数前后都有一个空行,而函数之间没有空行
// empty line here, cursor here
function f1(s)
real f1,s
f1 = 1/s
end
// empty line here
将光标放在上面的空行上,对任意寄存器进行录制。这里我使用的是registerc
。按qc,然后按Pjw*Ne^Ane^Ane^A{,然后按q退出
解释
// empty line here, cursor here
function f1(s)
real f1,s
f1 = 1/s
end
// empty line here
-猛拉下一段y}
-向下移动一段}
-放在这一行上面P
-移动一行完成j
-移动到下一个单词w
-在光标下搜索单词(这里是函数名)*
-向后搜索(我们使用N
将模式移到寄存器中)*
-转到单词末尾e
-按住A键可增加数字^A
-转到下一个匹配/向前搜索(这是函数名)n
-转到单词末尾e
-增加数字^A
-转到下一个匹配/向前搜索n
-转到单词末尾e
-增加数字^A
-向上移动一段(与开头相同的相对位置,但在插入的函数f2处){
@c
复制函数并增加所有数字。使用所需的计数作为前缀,例如5@c
将复制功能5次并调整编号
如果您不想记住字符串y}Pjw*Ne^Ane^Ane^A{
,可以将其粘贴到vim缓冲区中。您必须在拖动之前替换^A
。删除^A
,并在插入模式下按Ctrl-va。(如果您在屏幕会话中,则必须按Ctrl-aa,这是Ctrl-a
和a
)
在正常模式下,当光标位于测线上时,按“cY”键,将其拉入寄存器c
然后你可以用@c
重播它
通过这种方式,您还可以修改它或将其拖动到另一个寄存器
在你的
.vimrc
中使用let@c=y}}Pjw*Ne^Ane^Ane^A{
,让它在启动vim时总是加载注册c
。你总是可以使用录音(请参见:h录音
)。假设你的函数前后都有一个空行并且中间没有空行
// empty line here, cursor here
function f1(s)
real f1,s
f1 = 1/s
end
// empty line here
将光标放在上面的空行上,对任何您喜欢的寄存器进行录制。这里我使用的是寄存器c
。按qc,然后按y}}Pjw*Ne^Ane^Ane^a{
,然后按q
退出
解释
// empty line here, cursor here
function f1(s)
real f1,s
f1 = 1/s
end
// empty line here
-猛拉下一段y}
-向下移动一段}
-放在这一行上面P
-移动一行完成j
-移动到下一个单词w
-在光标下搜索单词(这里是函数名)*
-向后搜索(我们使用N
将模式移到寄存器中)*
-转到单词末尾e
-按住A键可增加数字^A
-转到下一个匹配/向前搜索(这是函数名)n
-转到单词末尾e
-增加数字^A
-转到下一个匹配/向前搜索n
-转到单词末尾e
-增加数字^A
-向上移动一段(与开头相同的相对位置,但在插入的函数f2处){
@c
复制函数并增加所有数字。使用所需的计数作为前缀,例如5@c
将复制功能5次并调整编号
如果您不想记住字符串y}Pjw*Ne^Ane^Ane^A{
,可以将其粘贴到vim缓冲区中。您必须在拖动之前替换^A
。删除^A
,并在插入模式下按Ctrl-va。(如果您在屏幕会话中,则必须按Ctrl-aa,这是Ctrl-a
和a
)
在正常模式下,当光标位于测线上时,按“cY”键,将其拉入寄存器c
然后你可以用@c
重播它
通过这种方式,您还可以修改它或将其拖动到另一个寄存器
在你的
.vimrc
中使用let@c=y}}Pjw*Ne^Ane^Ane^A{
在启动vim时总是加载注册c
。我想出了解决方案。它可能看起来很复杂,但实际上并不复杂,因为你只需将此函数复制到剪贴板并加载函数:
:@+
下面是具有附加功能的函数
fun! CopyAndIncrease()
try
let l:old_copy = getreg('0')
normal yip
let @0 = substitute(@0,'\d\+','\=submatch(0) + 1','g')
exec "normal }O\<Esc>p"
finally
call setreg('0', l:old_copy)
endtry
endfun
command! -nargs=0 CopyIncrease silent call CopyAndIncrease() | exec "normal \<Esc>"
let mapleader = ','
nnoremap <Leader>c :CopyIncrease<CR>
我找到了解决方案。它可能看起来很复杂,但实际上并不复杂,因为您只需将此函数复制到剪贴板并加载以下函数:
:@+
下面是具有附加功能的函数
fun! CopyAndIncrease()
try
let l:old_copy = getreg('0')
normal yip
let @0 = substitute(@0,'\d\+','\=submatch(0) + 1','g')
exec "normal }O\<Esc>p"
finally
call setreg('0', l:old_copy)
endtry
endfun
command! -nargs=0 CopyIncrease silent call CopyAndIncrease() | exec "normal \<Esc>"
let mapleader = ','
nnoremap <Leader>c :CopyIncrease<CR>