Zu Ihrer Information, ich verwende Tmux über die Mac OS X Terminal App.
Zu Ihrer Information, ich verwende Tmux über die Mac OS X Terminal App.
Antworten:
Dieselbe Frage plagt mich schon seit einiger Zeit. Hier ist das Beste, was ich mir ausgedacht habe. Fügen Sie dies in Ihre .tmux.conf-Datei ein:
bind -n C-k clear-history
Dies bindet Strg-K an den Befehl tmux clear-history. Mit der Option -n nach dem Binden müssen Sie nicht das Befehlspräfix tmux eingeben (standardmäßig Strg-b). Ich benutze bash, also macht Strg-L bereits das Äquivalent zur Eingabe von "clear" in der Befehlszeile. Mit diesen beiden Tasten erhalte ich eine nette Kombination aus Strg-L, Strg-K, die den gesamten Bildlaufpuffer vom Bildschirm entfernt ("Löschen") und dann den gesamten Verlauf löscht (Befehl tmux "Löschen des Verlaufs").
Es ist nicht ganz so schön wie die 1-Tasten-Combos von Terminal, iTerm oder Konsole, um es zu löschen, aber es ist eine Welt, die besser ist, als ständig Clear-History einzugeben.
bind k send-keys "clear"\; send-keys "Enter"
für den Clearing-Teil gearbeitet, aber die Verwendung des integrierten Teils ctrl+l
ist einfacher, und clear-history
es ist eine gute Ergänzung, den Scrollback-Verlauf loszuwerden.
Wie @juanpaco richtig angegeben, clear-history
ist dies der Befehl zum Löschen des Scrollback-Puffers.
Ich möchte hinzufügen, dass ich im selben Befehl auch löschen möchte, was auf dem Bildschirm angezeigt wird. Durch das Ausgeben eines wird send-keys -R
der Bildschirm zurückgesetzt (gelöscht), daher verwende ich Folgendes in meinem.tmux.conf
bind-key b send-keys -R \; clear-history
Dies löscht den Bildschirm UND den Scrollback-Puffer.
send-keys
: "Das -R-Flag bewirkt, dass der Terminalstatus zurückgesetzt wird." Sie müssen wahrscheinlich nur aktualisieren.
bind -n C-l send-keys C-l \; clear-history
clear-history
Befehl einzugeben , drücken Sie Ctrl+B
und starten Sie den Befehl mit einem Doppelpunkt ( :
).
send-keys -R C-l \; clear-history
.
In jeder Antwort hier geht es um das Hinzufügen neuer Tastenkombinationen.
Wenn Sie es nur gelegentlich tun möchten, benötigen Sie überhaupt kein Mapping ...
Das Präfix ist standardmäßig <Ctrl-b>
Geben Sie einfach <prefix>:
den entsprechenden Bereich ein clear-history
und geben Sie die Eingabetaste ein.
Eines der coolen Dinge an tmux ist, dass Sie einfach einen dieser Befehle ausführen können ... oder sie in einer Shell / einem Skript ausführen können, wie sie tmux command
... oder eine Tastenkombination für sie erstellen .
cle
einzugeben und <tab>
beim ersten Mal automatisch zu vervollständigen und beim zweiten Mal <up arrow>
auf den vorherigen Eintrag zuzugreifen. Auf diese Weise ist es ziemlich schnell.
<Ctrl-b> the
Drücken der Taste c` ein neues Fenster erstellt wird.
:
eine interaktive Eingabeaufforderung - hier geben Sie 'c' ein
Wenn Sie CTRL-L
plus Clear-History kombinieren möchten , fügen Sie dies zu Ihrem hinzu ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Dies funktioniert sogar, wenn Sie sich beispielsweise in einer MySQL-Shell befinden.
tail -f some.log
, oder? Gibt es eine Möglichkeit, dies zu kombinieren ctrl-Z
? Kann scheinen, es richtig zu machen.
Ich fand send-keys -R
es etwas langsam - hier ist eine andere Möglichkeit, Bildschirm und Verlauf mit einem einzigen Befehl zu löschen
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
Ein verschachtelter tmux-Aufruf wird als offensichtlicher verwendet
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
nicht auf den Bildschirm des aktuellen Text aus der Geschichte löschen - der klaren vergangene Befehl wird in einem separaten Thread zu senden-Tasten ausgeführt werden .
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Viel einfacher als die meisten anderen habe ich gerade ein Shell-Skript namens erstellt cls
und es ausgeführt, wann immer ich meinen Bildschirm und meinen Scrollback-Puffer löschen möchte.
Alles was es ist ist das:
cls
clear;
tmux clear-history;
Es wurde festgestellt, dass dies in TMUX 2.6 am besten funktioniert, indem der Bildschirm gelöscht und ein Bildlauf durchgeführt wird, die Eingabeaufforderung jedoch weiterhin angezeigt wird.
Verwendet Strg-L
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Strg-L wird in Konsolenanwendungen verwendet, um den Bildschirm neu zu zeichnen. Ich fand das, wenn ich daran gebunden warsend-keys -R
die Pfeiltasten in einigen Anwendungen (z. B. vim, mc) nicht mehr richtig funktionieren .
Um die Neuzeichnungsfunktion in Konsolenanwendungen beizubehalten, habe ich Folgendes verwendet:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Dies setzt voraus, dass die Option tmux aktiviert alternate-screen
ist (standardmäßig).
Ich habe einige der oben genannten und andere Quellen verwendet, um Folgendes zu finden:
bind k send-keys C-u \; send-keys C-k \; send-keys " clear && tmux clear-history" \; send-keys "Enter" \; run-shell "sleep .3s" \; send-keys "Up" \; send-keys C-u
Das führende Leerzeichen in "clear && tmux clear-history" verhindert, dass der Befehl in die Verlaufsdatei geschrieben wird (vorausgesetzt, Sie haben Ihr Shell-Setup, um führende Leerzeichen auf diese Weise zu behandeln; google "hist ignore space" + den Namen Ihrer Shell, um weitere Informationen zu erhalten die Info). Ich möchte, dass dieser Befehl nicht in meinem Verlauf angezeigt wird, da dies eher mit Strg-K im Terminal übereinstimmt.
Die ersten Sendetasten Cu und Sendetasten Ck löschen alles, was derzeit an der Eingabeaufforderung eingegeben wird, um sicherzustellen, dass der "Lösch- und Tmux-Löschverlauf" erfolgreich ist (z. B. wenn Sie an der Eingabeaufforderung "ABCDEFG" eingegeben haben und haben Wenn Sie den Cursor zwischen D und E bewegen, wird sichergestellt, dass "ABCD clear && tmux clear-historyEFG" nicht an die Shell gesendet wird, was fehlschlagen würde.
Mit den Send-Schlüsseln "Up" und den letzten Send-Schlüsseln Cu werden die letzten Elemente aus dem internen Verlauf Ihrer Shells gelöscht. Selbst mit dem oben erwähnten nachgestellten Leerzeichen enthält der interne Verlauf der Shell die Zeile "clear ...". Senden und Strg-u wird dies los.
Zuletzt habe ich in iTerm Strg-k so eingestellt, dass es Strg-a k zugeordnet wird (ich habe mein tmux-Präfix auf Strg-a gesetzt), damit ich Strg-k eingeben kann, was meine Hände nach so vielen Jahren tun möchten so. Ich gehe dazu zu iTerm> Einstellungen> Profile> Schlüssel und füge eine Verknüpfung hinzu, um den Hex-Code "0x01 0x6B" zu senden. Hier gibt es einen großartigen Artikel, der weitere Informationen zur Verwendung von Hex-Codes mit tmux und iTerm enthält: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Das gibt mir so ziemlich Strg-K mit tmux. Das einzige, was mich immer noch nervt, ist, dass das echte Strg-K ohne tmux keine Probleme hat, wenn Sie derzeit etwas an der Eingabeaufforderung eingegeben haben und das, was Sie eingegeben haben, beim Löschen des Bildschirms beibehalten. Wie bereits erwähnt, muss bei diesem Ansatz gelöscht werden, was eingegeben wurde, damit der Befehl "clear ..." nicht fehlschlägt. Aber es ist verdammt nah!
warum nicht? bind -n C-l send-keys C-l
-n C-l
Grunde sagt man "Fang das", und dann gibst du sofort dasselbe durch. (dh dies ist ein No-Op.)… Zweitens ist Ihre Absicht deaktiviert, da der Bildschirm⌃L
gelöscht wird und nicht ⌃B [
der Bildlauf zurück: Wenn Sie drücken und dann nach oben scrollen, sehen Sie, dass der gesamte Bildlauf noch aufgezeichnet ist. Das Ziel dieser Frage ist es, das Scrollback von (tmux) zu löschen , nicht das sichtbare Terminal.
Nach viel Recherche und Zeit. Ich habe auf zsh und terminal.app den besten Weg für mich gefunden
Ich benutze prefix-c
, um den Bildschirm und prefix-C
den Verlauf und den Bildlaufpuffer zu löschen und keine Zeilen darüber zu lassen, weil ich es ärgerlich finde.
# clear screen
bind c send-keys 'C-l'
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
# check if the pane is running vim
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
# clear screen
bind c if-shell "$is_vim" "send-keys c" "send-keys 'C-l'"
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
Ich habe also eine Weile den Ansatz von plu von oben verwendet , aber ich habe die Einschränkungen satt (im Grunde ist der ⌃L
Durchlauf bedeutungslos, es sei denn, er wird an ein Programm weitergeleitet, das ihn versteht.)
Daher habe ich die verschiedenen Ansätze in verschiedenen Antworten auf diesen Thread verbessert. Obwohl dieser Ansatz komplex ist, funktioniert er sowohl mit Shells als auch mit anderen Befehlen :
# ⌃K: Clears the current pane (from <https://stackoverflow.com/a/34162098>)
bind-key -n C-k \
if-shell "test \"$(printf '#{pane_current_command}' | tail -c 2)\" = sh" \
"send-keys C-l ; run-shell 'sleep .3s' ; clear-history" \
"split-window -vp 100 ; clear-history -t ! ; kill-pane"
Probieren Sie es mit tail -f /private/var/log/system.log
oder so!
Hier gibt es einen wichtigen Hinweis: Dadurch wird die Größe des zu löschenden Bereichs unsichtbar geändert , wenn es sich nicht um eine Shell handelt. Dies kann in einigen Befehlszeilenanwendungen, die auf SIGWINCH
es warten, ein Größenänderungsverhalten auslösen . Meine Argumentation ist jedoch, dass dies kein großes Problem ist, da es sich um Programme handelt, die Sie höchstwahrscheinlich sowieso nicht versuchen werden, zu "löschen" .
Darüber hinaus ist die Situation, in der Shell zitiert wird, bereits ein Chaos und kann beim Einbetten leicht zu einer größeren Situation #{pane_current_command}
werden. Seien Sie also vorsichtig, möglicherweise müssen Sie dies basierend auf Ihrer default-command
Einstellung ändern .
Gleiches gilt für meine Prüfung des Endes dieses Befehlsabgleichs "sh"
. Wenn Sie default-command
etwas Ähnliches /bin/bash --login
oder Kompliziertes haben exec
, endet der eigentliche Befehl möglicherweise nicht mit "sh"
; Verwenden Sie diese Option, ⌃B :
um auszuführen, display-message '#{pane_current_command}'
wenn Sie sehen möchten, gegen was getestet wird.