Cordiali saluti, sto usando Tmux tramite l'app Terminale di Mac OS X.
Cordiali saluti, sto usando Tmux tramite l'app Terminale di Mac OS X.
Risposte:
Questa stessa domanda mi sta tormentando da un po 'di tempo. Ecco il meglio che ho pensato. Inserisci questo nel tuo file .tmux.conf:
bind -n C-k clear-history
Ciò lega ctrl-k al comando tmux clear-history. Il bind -n dopo lo rende così non è necessario emettere il prefisso del comando tmux (ctrl-b per impostazione predefinita). Uso bash, quindi ctrl-l fa già l'equivalente di digitare "cancella" dalla riga di comando. Con questi due tasti ottengo una bella combinazione ctrl-l, ctrl-k, che sposta tutto il buffer di scorrimento dallo schermo (il "cancella") e quindi elimina tutta quella cronologia (il comando tmux "cancella cronologia").
Non è così carino come le combinazioni a 1 tasto di Terminal, iTerm o Konsole per cancellarlo, ma è un mondo migliore che scrivere sempre in Clear-History.
bind k send-keys "clear"\; send-keys "Enter"
per la parte di pulizia, ma l'uso del built-in ctrl+l
è più semplice e clear-history
sbarazzarsi della cronologia di scrollback è una buona aggiunta.
Come affermato correttamente da @juanpaco, clear-history
è il comando per cancellare il buffer di scrollback.
Aggiungo che mi piace anche cancellare ciò che è sullo schermo con lo stesso comando. L'emissione di un send-keys -R
reset (cancella) lo schermo, quindi uso quanto segue nel mio.tmux.conf
bind-key b send-keys -R \; clear-history
Questo cancella lo schermo E il buffer di scorrimento.
send-keys
: "Il flag -R provoca il ripristino dello stato del terminale." Probabilmente devi solo aggiornare.
bind -n C-l send-keys C-l \; clear-history
clear-history
comando, premere Ctrl+B
, quindi avviare il comando con due punti ( :
).
send-keys -R C-l \; clear-history
.
Ogni risposta qui parla dell'aggiunta di nuovi collegamenti chiave.
Se vuoi solo farlo di tanto in tanto non hai bisogno di una mappatura ...
Il prefisso predefinito è <Ctrl-b>
Basta digitare <prefix>:
nel riquadro pertinente e quindi digitare clear-history
e premere Invio.
Una delle cose interessanti di tmux è che puoi semplicemente eseguire uno qualsiasi dei comandi come quello ... o eseguirli in una shell / copiarli come tmux command
... o creare una scorciatoia da tastiera per loro.
cle
, quindi completare automaticamente con <tab>
la prima volta, quindi utilizzare la seconda volta <up arrow>
per accedere alla voce precedente. In questo modo è abbastanza veloce.
<Ctrl-b> the
premuto il tasto c` è impostato per creare una nuova finestra.
:
ti dà un prompt interattivo - è lì che dovresti digitare 'c'
Se desideri combinare CTRL-L
più cronologia chiara, aggiungi questo al tuo ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Funziona anche se, ad esempio, ti trovi in una shell MySQL.
tail -f some.log
, giusto? C'è un modo per combinare ctrl-Z
con questo? Sembra che riesca a farlo bene.
Ho scoperto send-keys -R
che essere un po 'lento: ecco un altro modo per cancellare schermo e cronologia con un solo comando
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
Una chiamata tmux nidificata viene utilizzata come la più ovvia
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
non riesce a cancellare il testo corrente dello schermo dalla cronologia - il comando clear-history sembra essere eseguito in un thread separato per inviare le chiavi.
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Molto più semplice della maggior parte, ho appena creato uno script shell chiamato cls
ed eseguirlo ogni volta che voglio cancellare il mio schermo e il buffer di scorrimento.
Tutto ciò che è è questo:
cls
clear;
tmux clear-history;
Trovato che funziona meglio in TMUX 2.6, cancellando lo schermo, scrollback, ma mantenendo il prompt visualizzato dopo.
Usa Ctrl-L
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Ctrl-L viene utilizzato nelle applicazioni console per ridisegnare lo schermo. Ho scoperto che se associato ad send-keys -R
esso, i tasti freccia non funzionerebbero più correttamente in alcune applicazioni (ad esempio vim, mc).
Per conservare la funzionalità di ridisegno nelle applicazioni console, ho usato:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Ciò richiede che l'opzione tmux alternate-screen
sia attiva (che è per impostazione predefinita).
Ho usato alcune delle precedenti e altre fonti per trovare:
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
Lo spazio iniziale in "clear && tmux clear-history" impedisce che il comando venga scritto nel file di cronologia (a condizione che tu abbia la tua configurazione della shell per trattare gli spazi iniziali in questo modo; google "hist ignore space" + il nome della tua shell per ulteriori informazioni Informazioni). Mi piace che questo comando non venga visualizzato nella mia cronologia poiché è più in linea con ctrl-k nel Terminale.
Le prime chiavi di invio Cu e le chiavi di invio Ck cancelleranno tutto ciò che è attualmente digitato al prompt per garantire che "cancella &&mm clear-history" abbia esito positivo (ad esempio, se hai digitato "ABCDEFG" al prompt e hai il tuo cursore tra la D e la E, questo assicura che "ABCD clear && tmux clear-historyEFG" non venga inviato alla shell, il che fallirebbe).
I tasti di invio "Su" e gli ultimi tasti di invio Cu cancellano gli ultimi elementi dalla cronologia interna delle shell. Anche con lo spazio finale menzionato sopra, la storia interna della shell includerà la riga "clear ...". Inviando e Ctrl-u si sbarazza di questo.
Infine, in iTerm ho impostato ctrl-k per mappare su ctrl-a k (ho il mio prefisso tmux impostato su ctrl-a), quindi posso digitare ctrl-k che è ciò che le mie mani vogliono fare da tanti anni così. Faccio questo, andando su iTerm> Preferenze> Profili> Tasti e aggiungendo un collegamento per inviare il codice esadecimale "0x01 0x6B". C'è un ottimo articolo qui che fornisce maggiori informazioni sull'uso dei codici esadecimali con tmux e iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Questo mi dà praticamente ctrl-k con tmux. L'unica cosa che mi tormenta ancora è che il vero ctrl-k senza tmux non ha problemi se al momento hai qualcosa digitato al prompt e manterrà ciò che hai digitato mentre cancelli lo schermo. Come accennato, questo approccio deve cancellare ciò che viene digitato in modo che il comando "cancella ..." non fallisca. Ma è abbastanza vicino!
perchè no? bind -n C-l send-keys C-l
-n C-l
pratica dice "prendi questo", e poi passi immediatamente la stessa cosa. (cioè questo è un no-op.)… Secondo, il tuo intento è spento, perché ⌃L
cancella lo schermo , non lo scorrimento indietro: se premi ⌃B [
e poi scorri verso l'alto, vedrai che tutto lo scorrimento è ancora registrato; l'obiettivo di questa domanda è quello di cancellare quel scrollback (di tmux), non il terminale visibile.
Dopo molte ricerche e tempo trascorso. Ho trovato il modo migliore per me su zsh e terminal.app
Sto usando prefix-c
per cancellare lo schermo e prefix-C
per cancellare la cronologia e il buffer di scorrimento e senza lasciare righe sopra perché lo trovo fastidioso.
# 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
Quindi, ho usato l'approccio di plu dall'alto per un po ', ma mi sono stufato delle sue limitazioni (in sostanza, il ⌃L
passaggio è insignificante a meno che non sia collegato a un programma che lo capisca).
Quindi ho migliorato i vari approcci in diverse risposte a questo thread; sebbene complesso, questo approccio funziona con entrambe le shell e altri comandi :
# ⌃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"
Provalo con tail -f /private/var/log/system.log
o qualcosa del genere!
C'è una nota importante qui: questo è il ridimensionamento invisibile del riquadro da cancellare, se non è una shell. Ciò può innescare il comportamento di ridimensionamento in alcune applicazioni della riga di comando che ascoltano SIGWINCH
es; ma il mio ragionamento è che questo non è un grosso problema, perché quelli sono programmi che molto probabilmente non proverai a "cancellare" comunque .
Inoltre, la situazione di quotazione della shell è già un disastro e può facilmente diventare più complicata durante l'incorporamento #{pane_current_command}
, quindi fai attenzione, potresti doverlo modificare in base alle tue default-command
impostazioni.
Lo stesso vale per il mio test della fine di quel comando corrispondente "sh"
; se hai default-command
qualcosa di simile /bin/bash --login
o qualcosa di complicato che coinvolge exec
, il comando effettivo potrebbe non finire con "sh"
; utilizzare ⌃B :
per eseguire display-message '#{pane_current_command}'
se si desidera vedere ciò che viene testato.