terminal - commands - tmux tutorial
¿Cómo puedo borrar el buffer de desplazamiento en Tmux? (12)
FYI, estoy usando Tmux a través de la aplicación Mac OS X Terminal.
¿Por qué no? bind -n Cl send-keys Cl
Cada respuesta aquí habla de agregar nuevas asociaciones de teclas.
Si solo quieres hacerlo ocasionalmente, no necesitas un mapeo en absoluto ...
El prefijo está predeterminado en <Ctrl-b>
Simplemente escriba <prefix>:
en el panel correspondiente y luego escriba clear-history
y presione enter.
Una de las mejores cosas de tmux es que puedes ejecutar cualquiera de los comandos como ese ... o ejecutarlos en un shell / script como el tmux command
... o hacer un atajo de teclado para ellos.
Como @juanpaco declaró correctamente, clear-history
es el comando para borrar el buffer de scrollback.
Añadiré que me gusta borrar también lo que está en la pantalla en el mismo comando. Emitir un send-keys -R
restablece (borra) la pantalla, por lo que uso lo siguiente en mi .tmux.conf
bind-key b send-keys -R /; clear-history
Esto borra la pantalla Y el buffer de desplazamiento.
Ctrl-L se usa en aplicaciones de consola para redibujar la pantalla. Descubrí que, cuando estaba vinculado a send-keys -R
, las teclas de flecha dejaban de funcionar correctamente en algunas aplicaciones (por ejemplo, vim, mc).
Para conservar la funcionalidad de redibujado en aplicaciones de consola, utilicé:
bind-key -n C-l if-shell -F ''#{alternate_on}'' ''send-keys C-l'' ''send-keys -R C-l; clear-history''
Esto requiere que la opción tmux alternate-screen
esté activada (que es por defecto).
De manera más simple que la mayoría, acabo de crear un script de shell llamado cls
, y lo ejecuto cada vez que quiero borrar mi pantalla y el buffer de scrollback.
Todo lo que es es esto:
cls
clear;
tmux clear-history;
Después de una gran cantidad de investigación y pasar tiempo. He encontrado la mejor manera para mí en zsh y terminal.app
Estoy usando prefix-c
para borrar la pantalla y prefix-C
para borrar el historial y el buffer de desplazamiento y no dejar líneas arriba porque lo encuentro molesto.
Sin Vim
# 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
Con Vim
# 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
Entonces, he estado usando el enfoque de desde arriba por un tiempo, pero me cansé de las limitaciones del mismo (básicamente, el ⌃L
pasado no tiene sentido a menos que esté conectado a un programa que lo entienda).
Así que he mejorado los diversos enfoques en diferentes respuestas a este hilo; aunque complejo, este enfoque funciona tanto con conchas como con otros comandos :
# ⌃K: Clears the current pane (from <https://.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"
Pruébalo con tail -f /private/var/log/system.log
o algo así!
Advertencias:
Aquí hay una nota importante: esto es cambiar el tamaño invisible del panel que se borra, si no es un shell. Esto puede desencadenar un comportamiento de redimensionamiento en algunas aplicaciones de línea de comandos que escuchan SIGWINCH
es; pero mi razonamiento es que este no es un gran problema, porque esos son programas que es muy probable que no intentes ''borrar'' de todos modos .
Además, la situación de las #{pane_current_command}
shell ya es un desastre, y puede convertirse fácilmente en más de una al incorporar #{pane_current_command}
, así que tenga cuidado, puede que tenga que modificar esto en función de su default-command
.
Lo mismo se aplica a mi prueba del final de ese comando que coincide con "sh"
; si tiene un default-command
de algo como /bin/bash --login
o algo complicado que involucre a exec
, el comando real puede no terminar con "sh"
; use ⌃B :
para ejecutar display-message ''#{pane_current_command}''
si quiere ver lo que se está probando.
Esta misma pregunta me ha estado plagando durante bastante tiempo. Aquí está lo mejor que he encontrado. Pon esto en tu archivo .tmux.conf:
bind -n C-k clear-history
Esto une ctrl-k al comando tmux clear-history. El -n después del enlace lo hace para que no tenga que emitir el prefijo de comando tmux (ctrl-b por defecto). Yo uso bash, entonces ctrl-l ya hace el equivalente a escribir "borrar" en la línea de comando. Con estas dos teclas obtengo un bonito combo ctrl-l, ctrl-k, que mueve todo el buffer de desplazamiento de la pantalla (el "clear") y luego borra todo ese historial (el comando "clear-history" de tmux).
No es tan bueno como los combos de 1 tecla de Terminal, iTerm o Konsole para limpiarlo, pero es un mundo mejor que escribir en la historia clara todo el tiempo.
He encontrado que el uso de send-keys -R
es un poco lento- aquí hay otra forma de borrar la pantalla y la historia con un solo comando
bind-key C send-keys "clear && tmux clear-history" /; send-keys "Enter"
Una llamada de tmux anidada se utiliza como el más obvio
bind-key C send-keys "clear" /; send-keys "Enter" /; clear-history
no borra el texto actual de la pantalla del historial: el comando clear-history parece ejecutarse en un hilo separado para enviar claves.
He usado algunas de las anteriores y otras fuentes para proponer:
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
El espacio principal en "clear && tmux clear-history" evita que el comando se escriba en el archivo de historial (siempre que tenga su configuración de shell para tratar espacios principales de esta manera; google "hist ignore space" + el nombre de su shell para más información). Me gusta que este comando no se muestre en mi historial ya que está más en línea con ctrl-k en la Terminal.
Las primeras teclas de envío Cu y las teclas de envío Ck borrarán lo que esté escrito actualmente en el aviso para garantizar que el "borrar && tmux borrar-historial" sea correcto (por ejemplo, si ha escrito "ABCDEFG" en el aviso y tiene su cursor entre la D y la E, esto asegura que "ABCD clear && tmux clear-historyEFG" no se envía al shell, que podría fallar).
Las teclas de envío "Arriba" y las últimas teclas de envío Cu borran los últimos elementos del historial interno de las conchas. Incluso con el espacio final mencionado anteriormente, la historia interna del shell incluirá la línea "clear ...". Enviando y Ctrl-u se deshace de esto.
Por último, en iTerm configuré ctrl-k para mapear ctrl-a k (tengo mi prefijo tmux establecido en ctrl-a), así que puedo escribir ctrl-k, que es lo que mis manos quieren hacer después de tantos años de hacer asi que. Lo hago yendo a iTerm> Preferencias> Perfiles> Teclas y agregando un atajo para enviar el código hexadecimal "0x01 0x6B". Aquí hay un excelente artículo que brinda más información sobre el uso de códigos hexadecimales con tmux e iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Eso me da bastante ctrl-k con tmux. Lo único que me molesta es que el ctrl-k real sin tmux no tiene problemas si actualmente tiene algo escrito en el prompt y conservará lo que ha escrito mientras borra la pantalla. Como se mencionó, este enfoque necesita borrar lo que se tipea para que el comando "borrar ..." no falle. ¡Pero está muy cerca!
Se encontró que esto funciona mejor en TMUX 2.6, borrando la pantalla, scrollback, pero manteniendo el mensaje después.
Utiliza Ctrl-L
bind-key -n C-l send-keys C-l /; send-keys -R /; clear-history
Si desea combinar CTRL-L
plus clear-history, agregue esto a su ~/.tmux.conf
:
bind u send-keys C-l /; run-shell "sleep .3s" /; clear-history
Esto incluso funciona si estás en un shell MySQL, por ejemplo.