0

my で次の関数を定義してい.vimrcます。特定のファイルの場合、これにより、3 行目以降の各行の先頭が行番号で変更されます。

function Foo()
   3,$ s/^/      /g
   3
   let i=1 | ,$ g/^/ s//\=i/ | let i+=1
   1
endfunction

ただし、関数を変更して、1 つの引数を受け入れるようにしたいと考えています。その単語が挿入されるため、関数は次のようになります。

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」を関数の引数として指定できるようにしたいので、別のファイルでは「sm1」ではなく「sm2」が必要になる場合があります。

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

すべてを1つのコマンドにまとめたい場合は、次のことができます。

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 に答える