
Wie ändere ich die Breite eines Tabulators zur Einrückung in ein- und mehrzeiligen Befehlen in ZSH? Dies ist nicht dasselbe wie wörtliche Tabulatoren. Wenn Sie die Tabulatortaste drücken, gibt ZSH tatsächlich Leerzeichen an das Terminal aus:
zsh -f # Run without config
blackcap% echo $'\t.'
.
blackcap% .
blackcap% if
if> .
blackcap% tabs 4
blackcap% echo $'\t.'
.
blackcap% .
blackcap% if
if> .
Dieses Verhalten wird weder durch Einstellungen in meinem Terminalemulator setterm --regtabs
noch durch die in erwähnte vielversprechend klingende IFS
Variable beeinflusst man zshparam
.
Ich könnte natürlich meine eigene Version schreiben und sie an die Tabulatortaste binden, aber dieser letzte Ausweg wird schnell haarig, wenn der Cursor bewegt wird, Zeilen umbrochen werden, mehr als eine Zeile vorhanden ist – ganz zu schweigen von >>
Freunden mit vi-Tasten.
Antwort1
ZLE erweitert TAB-Zeichen in Eingabeaufforderungszeichenfolgen und Eingabebefehlszeilen zu Leerzeichen auf dem Display. Die Erweiterung verwendet eine feste Berechnung von Tabstopps alle 8 Spalten und beinhaltet nicht die Ausgabe des tatsächlichen TAB-Zeichens an das Terminal und damit der tatsächlichen Tabstoppeinstellungen Ihres Terminals. Es macht die gleiche Annahme, wenn es TAB als Tastenkombination für die Cursorbewegung nach rechts verwendet, wenn es von der Terminfo/Termcap-Datenbank mitteilt, dass es keine parametrisierte Cursor-Vorwärts-Steuersequenz hat. (Beispiel,Beispiel,Beispiel)
Sie hatten Glück mit den Tabs. Verwenden Sie util-linux im Allgemeinen nicht setterm
in einem anderen Terminalemulator als dem integrierten Linux-Emulator, der Linux-KVTs steuert. Siehehttps://unix.stackexchange.com/a/491883/5132für ein portables Workalike, das die Steuersequenzen des in Linux integrierten Terminalemulators nicht fest codiert.
Antwort2
stty -a
zeigt Ihnen, ob das Terminal so eingerichtet ist, dass es Hardware-Registerkarten verwendet (wasdürfenprogrammiert werden) oder nicht (suchen Sie nachtab0
in der Ausgabe).
zsh
könnte fest codiert sein;setterm
ist sicherlich (sieheDas). Es würde funktionieren, wenn Ihr Terminal für Hardware-Tabs eingerichtet ist. Aber dietabs
Das Programm ist nicht fest codiert (und wahrscheinlich auf Ihrem Computer installiert).