我在.vimrc
中定义了以下功能。对于给定的文件,这应该使用行号从第3行开始更改每行的开头。
function Foo()
3,$ s/^/ /g
3
let i=1 | ,$ g/^/ s//\=i/ | let i+=1
1
endfunction
但是,我想更改函数,以便接受一个参数。它将插入该单词,以便该函数看起来如下:
function Foo(chr)
3,$ s/^/ /g
3
let i=1 | ,$ g/^/ s//\=i/ | let i+=1
1
3,$ s/^/chr /g
endfunction
编辑:提供一个例子。
我的输入文件如下所示:
some text1
some text 2
0000
0000
0001
0002
我想让文件看起来如下:
sm1 1 0000
sm1 2 0000
sm1 3 0001
.
.
所以我希望能够将“sm1”作为函数的参数,以便对于另一个文件,我可能想要“sm2”而不是“sm1”。
答案 0 :(得分:2)
您可能不需要函数
:3,$s/^/chr /
应该有效。但是,如果你想为此制作一个command
,你可以这样做:
command! -nargs=1 Example 3,$s/^/<args> /
这样您就可以使用:Example chr
在第3行及以上的开头插入chr
。
另外,您说您的原始功能会插入“行号”,但它会在第3行插入1,依此类推。我确定您知道可以使用:set nu
启用行号,但如果您想在每行3行及以上插入行号,您可以执行以下操作:
fun! Foo()
3,$s/^/\=line('.')." "
endfun
或者如果你想保留以前的功能,这就更加简洁了:
fun! Foo()
3,$s/^/\=(line('.')-2)." "
endfun
如果您想将所有这些组合成一个命令,您可以
com! -nargs=1 Example 3,$s/^/\="<args> ".(line('.')-2)." "
这将为您提供:Example <argument>
命令。所以现在你可以像你想要的那样做:Example sm1
。
如果您希望按原样保留您的功能,为了使其正常工作,您应该使用a:chr
,如下所示:
function Foo(chr)
3,$ s/^/ /g
3
let i=1 | ,$ g/^/ s//\=i/ | let i+=1
1
exe "3,$s/^/".a:chr." /g"
endfunction