我如何使用;替换为;在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好的,我在最后更新了我的答案,告诉你如何结合我的建议。这完全解决了问题!!非常感谢,非常感谢。