2017-11-15 8 views
1

私はtcshのmake補完に取り組んでいます。新しい単語の望ましい完成は、メークターゲットか変数かのどちらかです。例えばtcsh補完:接頭辞変数=

complete make 'n/*/(footarget1 bartarget2 FOOVAR1= BARVAR2=)/' 

このようにそれを書き込むことにより、新たなスペースがVARを設定しようとしたときに便利ではありません完了した後に末尾には(スペースを削除する必要があります)。

サフィックスをnullに設定すると、ターゲットを完成するときに便利ではありません(次の引数のためのスペースを入力する必要があります)。

ターゲットの1つが完了したときに接尾辞を付ける方法はありますが、VARの場合は接尾辞を付けないでください。

答えて

1

すべてのターゲットを大文字/小文字で変数から分離できるのは簡単です。

complete make \ 
'[email protected]*@(BARVAR2=)@@' \ 
'[email protected]*@(FOOVAR1=)@@' \ 
'[email protected]*@(VAR1= VAR2=)@@' \ 
'[email protected]*@(target1 target2 VAR1 VAR2 BARVAR2 FOOVAR1)@' 

完了すると、最初の(上から下へ読む)ルールのみが使用されます。
大文字の 'B'で始まる場合、最初のルールがヒットし、BARVAR2=に完了し、接尾辞スペースを省略します。
大文字の「F」で始まる場合は、同様にFOOVAR1=が完成します。
'V'には、スペースで区切られた2つのオプションがあります。
新しい変数を追加するには、開始文字のかっこ内に変数を追加するだけです。 他の開始文字が必要な場合は、単に'[email protected]*@(BARVAR2=)@@' \行を複製し、新しく生成された行にB*をあなたの文字(たとえばG*)に置き換えてください。

入力がこれらの大文字で始まらない場合、最後のルールが適用され、target1/target2に完了します。
あいまいでなくマッチが完了できる場合は、接尾辞スペースで追加されます。ボーナスとして

、また、あなたの最初のルールとして、これらを置くことができます:

'[email protected]*[email protected](val1)@' \| 
'[email protected]*[email protected](val2)@' 

あなたの現在の単語がBARVAR2=ある場合、このルールが完了としてあなたにval1を与えるだろう。
FOOVAR1=については、val2となります。

+0

あなたの答えをありがとうが、私は十分説明できませんでした。すべての変数がVARで始まるわけではありません。この例の変数をVAR1、VAR2からFOOVAR1、BARVAR2に変更しました。 –

+0

が答えを更新しました。 醜い部分は、Makefileターゲット/変数を自動的に補完するのが難しいという点です。 私はそれを一貫して行う方法を見つけられませんでした(特にターゲットの% - ワイルドカードのため) – sbulka