Ich benutze das menu select
Verhalten in zsh
, das ein Menü unterhalb des Cursors aufruft, in dem Sie die verschiedenen Möglichkeiten sehen können. Die .zshrc-Option, die ich dafür festgelegt habe, ist
zstyle ':completion:*' menu select=2
Standardmäßig wird durch Drücken von Return
, um eine Möglichkeit in diesem Menü auszuwählen, nur das Wort vervollständigt - der Befehl wird nicht gesendet. Zum Beispiel könnte ich ein Menü wie dieses bekommen
~ % cd de<TAB>
completing directory:
[Desktop/] Development/
Wenn Sie Return
hier drücken , erhalten Sie
~ % cd Desktop/
Ich muss dann Return
ein zweites Mal drücken , um den Befehl tatsächlich zu senden.
Ich kann dieses Verhalten dahingehend ändern, dass durch Drücken Return
beider Tasten der Abschluss ausgewählt und der Befehl auf diese Weise gesendet wird
bindkey -M menuselect '^M' .accept-line
Es gibt jedoch ein Problem damit: Manchmal muss ich eine Datei oder ein Verzeichnis vervollständigen, ohne den Befehl zu senden. Möglicherweise muss ich Folgendes tun ln -s Desktop Desktop2
: Wenn Sie mit diesem bindkey
Verhalten versuchen, Desktop fertigzustellen, wird ln -s Desktop/
es als Befehl gesendet, und das möchte ich natürlich nicht.
Ich bin mir bewusst, dass ich den Befehl nur durch Drücken der Leertaste ausführen kann, aber es ist jetzt eine Gewohnheit.
Gibt es eine Möglichkeit, dies so zu gestalten, dass Sie nur bei einigen Befehlen Return
einmal drücken können (wie cd
), bei allen anderen Befehlen jedoch zweimal drücken müssen?
.zshrc
Datei dies nicht zulässt, lautet die Antwort einfach nein, es sei denn, Sie passen den Quellcode selbst an, um befehlsbasiertes Verhalten zu unterstützen. Dann müssen Sie jedoch noch festlegen, für welche Befehle dies ausgeführt werden soll. Dies ist für sich genommen weitaus mühsamer, als nur eine zusätzliche Eingabetaste zu drücken ...