web-dev-qa-db-ja.com

zshの一部の文字については、完了後にスペースを保持してください

Zshには、完了に関連する自動化が少しあります。これは、ほとんどの場合、便利です。 Tab、スペースが自動的に挿入されます(または中括弧内の,などの他の適切な文字)。

押した後に&または|と入力した場合を除いて、この機能を維持したい Tab、スペースを削除したくありません。 ;のスペースを削除したいので、を押したときに自動的に挿入されるカンマを確実に抑制したい Tab}中括弧の列挙。

この機能は、デフォルトで「古い」(compctl)と「新しい」(compadd)完了システムの両方で機能します。私は新しいシステムにのみ興味があります。

完了によって挿入された自動サフィックスの自動抑制を調整するにはどうすればよいですか?

この機能は、 _ZLE_REMOVE_SUFFIX_CHARS_ および _ZLE_SPACE_SUFFIX_CHARS_ シェルパラメーターで調整できます。

  • _ZLE_REMOVE_SUFFIX_CHARS_変数が設定されている場合は、入力時に補完からの自動サフィックスが削除される文字のセットが含まれている必要があります。 _ZLE_REMOVE_SUFFIX_CHARS_が設定されていない場合、デフォルトの動作は次のようになります。

    _ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'
    _
  • _ZLE_SPACE_SUFFIX_CHARS_で設定された文字の場合、スペースに置き換えられれば十分です。また、_ZLE_SPACE_SUFFIX_CHARS_よりも優先されます


したがって、希望する動作を得るには、設定するだけで十分です。

_ZLE_SPACE_SUFFIX_CHARS=$'|&'
_

_,_と入力すると、中括弧の列挙に自動的に挿入された_}_が常に削除されるようです。

zshparam(1)は、特定の完了システムがこの動作をオーバーライドする可能性があると述べていますが、「新しい」compsys(あなたはそれをcompaddと呼んでいます)で問題なく動作するようです。

8
Adaephon