Behalten Sie nach Abschluss den Platz für einige Zeichen in zsh

6

Zsh verfügt über eine gewisse Automatisierung im Zusammenhang mit der Fertigstellung, die die meiste Zeit hilfreich ist: Nach dem Drücken Tabwird automatisch ein Leerzeichen eingefügt (oder ein anderes geeignetes Zeichen, z. B. ,in geschweiften Klammern).

Ich möchte diese Funktion beibehalten, außer in einem Fall: Wenn ich tippe &oder |drücke Tab, möchte ich nicht, dass der Speicherplatz entfernt wird. Ich bevorzuge es, das Leerzeichen auf einem zu entfernen ;, und ich möchte auf jeden Fall das automatisch eingefügte Komma unterdrücken, wenn ich Tab }eine geschweifte Klammer drücke.

Diese Funktion funktioniert standardmäßig sowohl in den Vervollständigungssystemen "alt" ( compctl) als auch "neu" ( compadd). Ich interessiere mich nur für das neue System.

Wie kann ich die automatische Unterdrückung des nach Abschluss eingefügten automatischen Suffix einstellen?

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

8

Diese Funktion kann mit ZLE_REMOVE_SUFFIX_CHARSund ZLE_SPACE_SUFFIX_CHARSShell-Parametern eingestellt werden.

  • Wenn die ZLE_REMOVE_SUFFIX_CHARSVariable festgelegt ist, sollte sie eine Reihe von Zeichen enthalten, die bei der Eingabe dazu führen, dass automatische Suffixe nach Abschluss entfernt werden. Wenn ZLE_REMOVE_SUFFIX_CHARSnicht festgelegt, entspricht das Standardverhalten

    ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'
  • Für Zeichen, die in ZLE_SPACE_SUFFIX_CHARSSuffices gesetzt sind, werden diese durch ein Leerzeichen ersetzt. Es hat auch Vorrang vorZLE_SPACE_SUFFIX_CHARS


Um Ihr gewünschtes Verhalten zu erhalten, sollte es ausreichend sein, es einzustellen

ZLE_SPACE_SUFFIX_CHARS=$'|&'

Es scheint, dass die automatisch ,in Klammern eingefügten Aufzählungen beim Tippen immer entfernt werden }.

Obwohl zshparam(1)erwähnt wird, dass bestimmte Vervollständigungssysteme dieses Verhalten überschreiben können, scheint es mit dem "neuen" compsys(Sie haben es genannt compadd) gut zu funktionieren.

Adaephon
quelle