0

我在我的.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”。

4

1 回答 1

2

您可能不需要函数,因为

:3,$s/^/chr        /

应该管用。但是,如果你想为此做一个command,你可以做一个这样的:

command! -nargs=1 Example 3,$s/^/<args>        /

这将允许您在第 3 行及以上行的开头:Example chr插入。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
于 2012-08-19T20:47:32.323 回答