Esta misma pregunta me ha estado atormentando durante bastante tiempo. Aquí está lo mejor que se me ocurrió. Ponga esto en su archivo .tmux.conf:
bind -n C-k clear-history
Esto une ctrl-k al comando tmux clear-history. La opción -n after bind lo hace para que no tenga que emitir el prefijo del comando tmux (ctrl-b por defecto). Yo uso bash, por lo que ctrl-l ya hace el equivalente de escribir "clear" en la línea de comando. Con estas dos teclas obtengo un buen combo ctrl-l, ctrl-k, que mueve todo el búfer de desplazamiento de la pantalla (el "borrar") y luego elimina todo ese historial (el comando tmux "borrar-historial").
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 un historial claro todo el tiempo.
Agradable. Lo he estado haciendo bind k send-keys "clear"\; send-keys "Enter"para la parte de limpieza, pero usar el incorporado ctrl+les más simple, y clear-historydeshacerse del historial de desplazamiento es una buena adición.
Henrik N
1
¡Este enlace arruina mis paneles, elimina todo el texto de todos los paneles y elimina los bordes a su alrededor! ¿Alguna idea de qué pasa con eso?
Ian Vaughan
Yikes ¿Qué programa de shell usas? ¿Por casualidad ya tiene algún comportamiento definido para ctrl + k?
juanpaco
iTerm2. Acabo de ver que ctrl + k ya hace esto sin el conjunto de enlaces tmux, por lo que debe ser una asignación iTerm2.
Ian Vaughan
Extraño. Yo también uso iTerm2. No lo he actualizado durante algún tiempo, por lo que podría ser una diferencia de versión. Tampoco uso Ck porque eso causó problemas con mis enlaces vim. Yo uso Cn ahora.
juanpaco
58
Como @juanpaco declaró correctamente, clear-historyes el comando para borrar el búfer de desplazamiento hacia atrás.
Agregaré que también me gusta borrar lo que está en la pantalla con el mismo comando. Emitir un send-keys -Rrestablecimiento (borra) la pantalla, así que utilizo lo siguiente en mi.tmux.conf
bind-key b send-keys -R \; clear-history
Esto borra la pantalla Y el búfer de desplazamiento hacia atrás.
Directamente de la documentación de tmux en send-keys: "El indicador -R hace que el estado del terminal se restablezca". Probablemente solo necesite actualizar.
z5h
20
El inconveniente de usar -R es que su línea de entrada actual queda oculta, de manera diferente a cuando borra su terminal con Ctrl + l. Lo que hice esbind -n C-l send-keys C-l \; clear-history
volpato
66
Para aquellos de ustedes que no saben (como yo no sabía), para llegar al estado para ingresar el clear-historycomando, presione Ctrl+By luego comience el comando con dos puntos ( :).
palswim
1
@volpato Me gusta su enfoque, pero creo que todavía deja una 'pantalla' del búfer en el desplazamiento hacia atrás. No tengo idea de por qué. -R pone en blanco el mensaje, pero lo 'resolví' agregando un Cm adicional al final (pero luego eso lo coloca en la segunda línea).
Gdogg
2
Puedes condensar esto a send-keys -R C-l \; clear-history.
ivan
35
Cada respuesta aquí habla sobre agregar nuevas asociaciones de teclas.
Si solo quieres hacerlo ocasionalmente, no necesitas un mapeo en absoluto ...
Prefijo predeterminado a <Ctrl-b>
Simplemente escriba <prefix>:el panel correspondiente y luego escriba clear-historyy presione Intro.
Una de las cosas interesantes de tmux es que puede ejecutar cualquiera de los comandos de esa manera ... o ejecutarlos en un shell / script como tmux command... o hacer un atajo de teclado para ellos.
Es posible escribir los primeros tres caracteres cle, y luego autocompletar con <tab>la primera vez, luego usar la segunda vez <up arrow>para acceder a la entrada anterior. De esta manera es bastante rápido.
bct
1
Esto no funciona para mí porque cuando empiezo a escribir después de <Ctrl-b> the presionar la tecla c` está configurado para crear una nueva ventana.
fraxture el
@fraxture Creo que malinterpretas: después de presionar <Ctrl-b> y luego presionarlo:
aparece
21
Si desea combinar CTRL-Lplus 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 de MySQL, por ejemplo.
Hay una advertencia con este enfoque y es que solo funciona en shells locales, ya que envía el tmux clear-history como cadena para que se escriba en el panel activo. Lo he adaptado a:bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Santi P.
12
Mucho más simple que la mayoría, acabo de crear un script de shell llamado clsy lo ejecuto cada vez que quiero borrar mi pantalla y el búfer de desplazamiento.
Pero, ¿y si no tienes acceso a la línea de comando? Por ejemplo, cuando se está ejecutando un servidor y estás viendo los registros.
zudduz
¿desde dónde estarías mirando los registros? ¿Sobre un servidor web? Si es así, entonces no entiendo por qué tmux está involucrado.
Brad Parks el
1
Es bueno poder ver los registros del servidor y su editor vim simultáneamente.
zudduz
¿Usas tmux splits? Si no, simplemente divida su ventana en 2, y vea sus registros en uno, y use vim en el otro simplemente ejecutando `tmux split" dentro de su sesión de tmux ... ¿Pero tal vez no entiendo lo que está haciendo?
Brad Parks,
10
Encontré que esto funciona mejor en TMUX 2.6, borrando la pantalla, desplazándose hacia atrás, pero manteniendo el mensaje que se muestra después.
Ctrl-L se usa en aplicaciones de consola para volver a dibujar la pantalla. Descubrí que cuando se vincula a send-keys -Rél, las teclas de flecha ya no funcionan correctamente en algunas aplicaciones (por ejemplo, vim, mc).
Para conservar la funcionalidad de redibujar en aplicaciones de consola, utilicé:
El espacio inicial 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 los espacios iniciales de esta manera; google "hist ignore space" + el nombre de su shell para obtener más información) info) Me gusta que este comando no aparezca 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 teclas de envío Ck borrarán todo lo que se escriba actualmente en la solicitud para asegurarse de que "clear && tmux clear-history" sea exitoso (por ejemplo, si ha escrito "ABCDEFG" en la solicitud y tiene con el cursor entre la D y la E, esto garantiza que "ABCD clear && tmux clear-historyEFG" no se envíe al shell, lo 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 sus shells. Incluso con el espacio final mencionado anteriormente, el historial interno del shell incluirá la línea "claro ...". Enviando y Ctrl-u se deshace de esto.
Por último, en iTerm configuré ctrl-k para asignar a ctrl-a k (tengo mi prefijo tmux configurado en ctrl-a), por lo que puedo escribir ctrl-k, que es lo que mis manos quieren hacer después de tantos años de hacer entonces. Hago esto yendo a iTerm> Preferencias> Perfiles> Claves y agregando un acceso directo para enviar el código hexadecimal "0x01 0x6B". Aquí hay un gran 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 casi me da ctrl-k con tmux. Lo único que todavía me molesta es que el verdadero ctrl-k sin tmux no tiene problemas si actualmente tiene algo escrito en el indicador y conservará lo que ha escrito mientras limpia la pantalla. Como se mencionó, este enfoque necesita borrar lo que está escrito para que el comando "borrar ..." no falle. ¡Pero está muy cerca!
También me gustaría saber si hay una razón para no recomendar esto.
Gaston Sanchez
2
En primer lugar, eso no es necesario: -n C-lbásicamente dice 'atrapa esto', y luego estás pasando eso mismo inmediatamente. (es decir, esto es un no-op.) ... Segundo, su intención está apagada, porque ⌃Lborra la pantalla , no el desplazamiento hacia atrás: si presiona ⌃B [y luego hacia arriba, verá que todo el desplazamiento hacia atrás todavía se registra; el objetivo de esta pregunta es limpiar que scrollback (de tmux), el terminal no visible.
ELLIOTTCABLE
2
Después de mucha investigación y pasar tiempo. He encontrado la mejor manera para mí en zsh y terminal.app
Estoy usando prefix-cpara borrar la pantalla y prefix-Cpara borrar el historial y el búfer de desplazamiento y no dejar líneas arriba porque me resulta 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 plu desde arriba por un tiempo, pero me harté de las limitaciones del mismo (básicamente, la ⌃Ltransmisión no tiene sentido a menos que se canalice 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 shells como con otros comandos :
Pruébalo con tail -f /private/var/log/system.logo algo así!
Advertencias:
Hay una nota importante aquí: esto es invisiblemente redimensionar el panel que se está borrando, si no es un shell. Esto puede desencadenar un comportamiento de cambio de tamaño en algunas aplicaciones de línea de comandos que escuchan SIGWINCHes; 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 citas de shell ya es un desastre, y puede convertirse fácilmente en más de uno cuando se incrusta #{pane_current_command}, así que tenga cuidado, es posible que tenga que modificar esto en función de su default-commandconfiguración.
Lo mismo se aplica a mi prueba del final de esa coincidencia de comandos "sh"; Si tiene default-commandalgo parecido /bin/bash --logino algo complicado exec, el comando real puede no terminar con "sh"; use ⌃B :para ejecutar display-message '#{pane_current_command}'si desea ver contra qué se está probando.
Respuestas:
Esta misma pregunta me ha estado atormentando durante bastante tiempo. Aquí está lo mejor que se me ocurrió. Ponga esto en su archivo .tmux.conf:
Esto une ctrl-k al comando tmux clear-history. La opción -n after bind lo hace para que no tenga que emitir el prefijo del comando tmux (ctrl-b por defecto). Yo uso bash, por lo que ctrl-l ya hace el equivalente de escribir "clear" en la línea de comando. Con estas dos teclas obtengo un buen combo ctrl-l, ctrl-k, que mueve todo el búfer de desplazamiento de la pantalla (el "borrar") y luego elimina todo ese historial (el comando tmux "borrar-historial").
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 un historial claro todo el tiempo.
fuente
bind k send-keys "clear"\; send-keys "Enter"
para la parte de limpieza, pero usar el incorporadoctrl+l
es más simple, yclear-history
deshacerse del historial de desplazamiento es una buena adición.Como @juanpaco declaró correctamente,
clear-history
es el comando para borrar el búfer de desplazamiento hacia atrás.Agregaré que también me gusta borrar lo que está en la pantalla con el mismo comando. Emitir un
send-keys -R
restablecimiento (borra) la pantalla, así que utilizo lo siguiente en mi.tmux.conf
bind-key b send-keys -R \; clear-history
Esto borra la pantalla Y el búfer de desplazamiento hacia atrás.
fuente
send-keys
: "El indicador -R hace que el estado del terminal se restablezca". Probablemente solo necesite actualizar.bind -n C-l send-keys C-l \; clear-history
clear-history
comando, presioneCtrl+B
y luego comience el comando con dos puntos (:
).send-keys -R C-l \; clear-history
.Cada respuesta aquí habla sobre agregar nuevas asociaciones de teclas.
Si solo quieres hacerlo ocasionalmente, no necesitas un mapeo en absoluto ...
Prefijo predeterminado a
<Ctrl-b>
Simplemente escriba
<prefix>:
el panel correspondiente y luego escribaclear-history
y presione Intro.Una de las cosas interesantes de tmux es que puede ejecutar cualquiera de los comandos de esa manera ... o ejecutarlos en un shell / script como
tmux command
... o hacer un atajo de teclado para ellos.fuente
cle
, y luego autocompletar con<tab>
la primera vez, luego usar la segunda vez<up arrow>
para acceder a la entrada anterior. De esta manera es bastante rápido.<Ctrl-b> the
presionar la tecla c` está configurado para crear una nueva ventana.:
Si desea combinar
CTRL-L
plus clear-history, agregue esto a su~/.tmux.conf
:Esto incluso funciona si estás en un shell de MySQL, por ejemplo.
fuente
tail -f some.log
¿verdad? ¿Hay alguna forma de combinarctrl-Z
esto? Puede parecer acertar.Descubrí que usar
send-keys -R
es un poco lento: aquí hay otra forma de borrar la pantalla y el historial con un solo comandoUna llamada tmux anidada se usa como la más obvia
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
no puede borrar el texto actual de la pantalla del historial: el comando clear-history parece ejecutarse en un hilo separado para enviar claves.
fuente
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Mucho 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 búfer de desplazamiento.Todo lo que es esto es:
cls
fuente
Encontré que esto funciona mejor en TMUX 2.6, borrando la pantalla, desplazándose hacia atrás, pero manteniendo el mensaje que se muestra después.
Utiliza Ctrl-L
fuente
Ctrl-L se usa en aplicaciones de consola para volver a dibujar la pantalla. Descubrí que cuando se vincula a
send-keys -R
él, las teclas de flecha ya no funcionan correctamente en algunas aplicaciones (por ejemplo, vim, mc).Para conservar la funcionalidad de redibujar en aplicaciones de consola, utilicé:
Esto requiere que la opción tmux
alternate-screen
esté activada (que está por defecto).fuente
He utilizado algunas de las fuentes anteriores más otras para crear:
El espacio inicial 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 los espacios iniciales de esta manera; google "hist ignore space" + el nombre de su shell para obtener más información) info) Me gusta que este comando no aparezca 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 teclas de envío Ck borrarán todo lo que se escriba actualmente en la solicitud para asegurarse de que "clear && tmux clear-history" sea exitoso (por ejemplo, si ha escrito "ABCDEFG" en la solicitud y tiene con el cursor entre la D y la E, esto garantiza que "ABCD clear && tmux clear-historyEFG" no se envíe al shell, lo 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 sus shells. Incluso con el espacio final mencionado anteriormente, el historial interno del shell incluirá la línea "claro ...". Enviando y Ctrl-u se deshace de esto.
Por último, en iTerm configuré ctrl-k para asignar a ctrl-a k (tengo mi prefijo tmux configurado en ctrl-a), por lo que puedo escribir ctrl-k, que es lo que mis manos quieren hacer después de tantos años de hacer entonces. Hago esto yendo a iTerm> Preferencias> Perfiles> Claves y agregando un acceso directo para enviar el código hexadecimal "0x01 0x6B". Aquí hay un gran 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 casi me da ctrl-k con tmux. Lo único que todavía me molesta es que el verdadero ctrl-k sin tmux no tiene problemas si actualmente tiene algo escrito en el indicador y conservará lo que ha escrito mientras limpia la pantalla. Como se mencionó, este enfoque necesita borrar lo que está escrito para que el comando "borrar ..." no falle. ¡Pero está muy cerca!
fuente
¿Por qué no?
bind -n C-l send-keys C-l
fuente
-n C-l
básicamente dice 'atrapa esto', y luego estás pasando eso mismo inmediatamente. (es decir, esto es un no-op.) ... Segundo, su intención está apagada, porque⌃L
borra la pantalla , no el desplazamiento hacia atrás: si presiona⌃B [
y luego hacia arriba, verá que todo el desplazamiento hacia atrás todavía se registra; el objetivo de esta pregunta es limpiar que scrollback (de tmux), el terminal no visible.Después de mucha 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 yprefix-C
para borrar el historial y el búfer de desplazamiento y no dejar líneas arriba porque me resulta molesto.Sin Vim
Con vim
fuente
Para una solución rápida para borrar paneles tmux individuales, puede configurar un alias ...
fuente
Entonces, he estado usando el enfoque de plu desde arriba por un tiempo, pero me harté de las limitaciones del mismo (básicamente, la
⌃L
transmisión no tiene sentido a menos que se canalice 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 shells como con otros comandos :
Pruébalo con
tail -f /private/var/log/system.log
o algo así!Advertencias:
Hay una nota importante aquí: esto es invisiblemente redimensionar el panel que se está borrando, si no es un shell. Esto puede desencadenar un comportamiento de cambio de tamaño 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 citas de shell ya es un desastre, y puede convertirse fácilmente en más de uno cuando se incrusta
#{pane_current_command}
, así que tenga cuidado, es posible que tenga que modificar esto en función de sudefault-command
configuración.Lo mismo se aplica a mi prueba del final de esa coincidencia de comandos
"sh"
; Si tienedefault-command
algo parecido/bin/bash --login
o algo complicadoexec
, el comando real puede no terminar con"sh"
; use⌃B :
para ejecutardisplay-message '#{pane_current_command}'
si desea ver contra qué se está probando.fuente