私はコマンドを書きたい、このコマンドはこの形式を持っているでしょう:引数を渡すには:command to function?
[range]MyCMD[!] [count] [oneArg] [flags]
または
[range]MyCMD[!] [oneArg] [count] [flags]
似
:[range]P[rint] [count] [flags]
または
:[range]d[elete] [x] {count}
へコマンドMyCMD
は最終的には何らかの作業を行うための関数を呼び出します。私はここでは、この行(がを動作しません)
command! -nargs=+ -range -bang -count=0 MyCMD <line1>,<line2>call MyFUNC(<q-args>, "<bang>","<count>", .... ..)
を書いた問題は、これらの引数を処理する方法を、次のとおりです。私は助け、-range
と-count
について読ん
問題1を同時に使用することはできませんが、私はそれらの両方が必要です。私はまた、いくつかのvimコマンドを見ました:delete、:print、これらのコマンドを使うと、
range
とcount
の両方を与えることができます。また、{count}
または[count]
が利用可能な場合、vim docには同じコマンドの2つのエントリがあることがわかりました。以下のような::[range]d[elete] [x] :[range]d[elete] [x] {count}
または
:[range]p[rint] [flags]
:[range]p[rint] {count} [flags]
はなぜですか?なぜ[count]
とだけではないのですか? (これは別の小さな疑問だろう)
問題2私のデザインから、これらすべての引数はオプションであり、彼らは、デフォルト値を持っている(下表参照します)。これらの引数を関数に渡すにはどうすればいいですか(私は
<q-args> and <f-args>
をチェックしました)、どのユーザー入力がどの引数であるかを区別するにはどうすればよいですか?argName | Default value | description ------------------------------------- range | current line | this could be get by function xxx () range count | 0 | this could be get by <count> bang | "" | this is easy too, with <bang> arg | " " | this argument could have space flags | "" | no space allowed for flags -------------------------------------
感謝:たとえばユーザーが
:MyCMD 5 g
5 is count? or arg? g is arg or flag? or '5 g' is arg?
を与え、ここで引数のデフォルト値です。
thx Ingo !.はい、私は関数のargsを解析するだろうが、私は正しい方法を知らない。 3つの引数が解析される必要があります。 count、arg、およびflags。すべてオプションです。多分私はいくつかのフォーマットを定義するべきです。 "arg"の場合、スペースは許されているので、値は引用符で囲まなければなりません。それは少し簡単です。数字やフラグ文字列をチェックします。私はやります。これ以上の提案はありますか? – Kent
と私のポストの "別の小さな質問"の理由を知っていますか?私は昨日私の問題の答えを探して、ただ気づいた。ありがとうございました。 – Kent
引数があまりにもあいまいで構文解析できない場合は、構文を再考してください。たぶん統一性を強化したり、それがどのようなタイプのものであるかのヒントを与えるかもしれない。 –