我如何使用;替换为;在vimscript中使用提供的模式的命令?

我如何使用;替换为;在vimscript中使用提供的模式的命令?,vim,Vim,我在我的.vimrc中定义了以下函数。对于给定的文件,这应该使用行号从第三行开始更改每行的开头 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

我在我的
.vimrc
中定义了以下函数。对于给定的文件,这应该使用行号从第三行开始更改每行的开头

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
sm1     1        0000
sm1     2        0000
sm1     3        0001
.
.
编辑:提供一个例子

我的输入文件如下所示:

some text1
some text 2
0000
0000
0001
0002
command! -nargs=1 Example 3,$s/^/<args>        /
function Foo(chr)
   3,$ s/^/      /g
   3
   let i=1 | ,$ g/^/ s//\=i/ | let i+=1
   1
   exe "3,$s/^/".a:chr."        /g"
endfunction
我希望使文件看起来如下所示:

function Foo(chr)
   3,$ s/^/      /g
   3
   let i=1 | ,$ g/^/ s//\=i/ | let i+=1
   1
   3,$ s/^/chr        /g
endfunction
sm1     1        0000
sm1     2        0000
sm1     3        0001
.
.

因此,我希望能够将“sm1”作为函数的参数,这样对于另一个文件,我可能希望使用“sm2”而不是“sm1”。

您可能不需要函数,因为

:3,$s/^/chr        /
应该有用。但是,如果您想为此创建一个
命令
,您可以创建如下命令:

some text1
some text 2
0000
0000
0001
0002
command! -nargs=1 Example 3,$s/^/<args>        /
function Foo(chr)
   3,$ s/^/      /g
   3
   let i=1 | ,$ g/^/ s//\=i/ | let i+=1
   1
   exe "3,$s/^/".a:chr."        /g"
endfunction
或者,如果您想保留以前的功能,这更简洁:

fun! Foo()
   3,$s/^/\=(line('.')-2)."      "
endfun
如果您想将所有这些合并到一个命令中,您可以这样做

com! -nargs=1 Example 3,$s/^/\="<args>     ".(line('.')-2)."        "

我喜欢你的回答。但是,我希望函数接受参数的原因是,我希望用一个调用完成所有3个步骤。我目前正在做的是您建议的,首先用开头的数字创建文件,然后用“chr”替换开头,但不同文件的“chr”会有所不同。@Sam我的答案解决了您的问题吗?是否有其他方法可以提供帮助?实际上,我需要提供要替换的字符串作为参数,因为每个文件的字符串都会更改。这样我就可以用一个参数调用这个函数,然后得到一个我想要的格式的文件。如果我不清楚,我应该举个例子。@Sam好的,我在最后更新了我的答案,告诉你如何结合我的建议。这完全解决了问题!!非常感谢,非常感谢。