Para su información, estoy usando Tmux a través de la aplicación Mac OS X Terminal.
Para su información, estoy usando Tmux a través de la aplicación Mac OS X Terminal.
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:
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.
bind k send-keys "clear"\; send-keys "Enter"
para la parte de limpieza, pero usar el incorporado ctrl+l
es más simple, y clear-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.
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, presione Ctrl+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 escriba clear-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.
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
:
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.
tail -f some.log
¿verdad? ¿Hay alguna forma de combinar ctrl-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 comando
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
Una 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.
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
clear;
tmux clear-history;
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
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
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é:
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 está por defecto).
He utilizado algunas de las fuentes anteriores más otras para crear:
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 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!
¿Por qué no? bind -n C-l send-keys C-l
-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 y prefix-C
para borrar el historial y el búfer de desplazamiento y no dejar líneas arriba porque me resulta molesto.
# 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
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 :
# ⌃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"
Pruébalo con tail -f /private/var/log/system.log
o algo así!
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 su default-command
configuración.
Lo mismo se aplica a mi prueba del final de esa coincidencia de comandos "sh"
; Si tiene default-command
algo parecido /bin/bash --login
o 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.