これは単純なユーザー定義関数です。
fun! Foo() range
echo a:firstline a:lastline
endfun
:5call Foo()
そして:5,5call Foo()
私に同じ結果を与えます。- ただし、
:5j
異なる:5,5j
結果が得られます。
のように振る舞う関数を書くことはできますjoin
か?
行アドレスと行範囲をどのようにjoin
区別しますか?
これは単純なユーザー定義関数です。
fun! Foo() range
echo a:firstline a:lastline
endfun
:5call Foo()
そして:5,5call Foo()
私に同じ結果を与えます。:5j
異なる:5,5j
結果が得られます。のように振る舞う関数を書くことはできますjoin
か?
行アドレスと行範囲をどのようにjoin
区別しますか?
カスタム を定義することにより:command
、-range
および-count
属性を使用して、範囲の消費方法をより適切に制御できます。ただし、それでもの動作を正確に複製することはできないと思います:join
。カスタム Vim コマンドのインターフェイスは、組み込みコマンドで使用できるものほど豊富ではありません。
回避策として、histget('cmd', -1)
コマンドを呼び出したコマンドラインを取得し、元の範囲を含む正確なコマンド呼び出しを解析するために使用できます (別のコマンドに渡すことで再利用できますが、それを使用して行演算を実行できます)。実際の行番号ではなく生の範囲であるため、問題があります)。この回避策は対話型コマンドでのみ機能し、脆く、多少の努力が必要です。代わりに 2 つの異なるコマンドを定義することで、この問題を完全に回避できるかもしれません。