Comment puis-je effacer le tampon de défilement dans Tmux?
Pour info, J'utilise Tmux via L'application Mac OS X Terminal.
12 réponses
Cette même question me tourmente depuis un certain temps. Ici est la meilleure que j'ai trouvé. Mettre ceci dans votre .tmux.fichier conf:
bind -n C-k clear-history
Cela lie ctrl-k à la commande tmux clear-history. Le-N après bind fait en sorte que vous n'avez pas à émettre le préfixe de commande tmux (ctrl-b par défaut). J'utilise bash, donc ctrl-l fait déjà l'équivalent de taper "clear" sur la ligne de commande. Avec ces deux touches, je reçois un joli combo ctrl-l, Ctrl-k, qui déplace tout le tampon de défilement l'écran (le "clear"), puis supprime tout cet historique (la commande tmux "clear-history").
Ce n'est pas aussi agréable que les combos 1-key De Terminal, iTerm ou Konsole pour l'effacer, mais c'est un monde meilleur que de taper dans clear-history tout le temps.
Comme @ juanpaco l'a correctement indiqué, clear-history
est la commande pour effacer le tampon de défilement.
Je vais ajouter que j'aime aussi effacer ce qui est sur l'écran dans la même commande.
L'émission d'un send-keys -R
réinitialise (efface) l'écran, donc j'utilise ce qui suit dans mon .tmux.conf
bind-key b send-keys -R \; clear-history
Cela efface l'écran et le tampon de défilement.
Si vous voulez combiner CTRL-L
Plus Clear-history, ajoutez ceci à votre ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Cela fonctionne même si vous êtes dans un shell MySQL par exemple.
J'ai trouvé que l'utilisation de send-keys -R
était un peu lente-voici une autre façon d'effacer l'écran et l'historique avec une seule commande
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
Un appel tmux imbriqué est utilisé comme le plus évident
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
Échoue pour effacer l'écran du texte actuel de l'histoire - le clair-commande historique apparaît à exécuter dans un thread séparé pour send-keys.
Chaque réponse ici parle d'ajouter de nouvelles liaisons de clés.
Si vous voulez juste le faire de temps en temps, vous n'avez pas besoin d'un mappage du tout...
Préfixe par défaut <Ctrl-b>
Viens de type <prefix>:
dans le volet correspondant, puis tapez clear-history
et appuyez sur entrée.
L'Une des choses cool sur tmux est que vous pouvez simplement exécuter des commandes comme ça... ou exécutez-les dans un shell / script comme tmux command
... ou faire un raccourci clavier pour eux.
Beaucoup plus simple que la plupart, je viens de créer un script shell appelé cls
, et l'exécuter chaque fois que je veux effacer mon tampon d'écran et de défilement.
Tout ce qu'il est est ceci:
Cls
clear;
tmux clear-history;
J'ai utilisé certaines des sources ci-dessus ainsi que d'autres sources pour trouver:
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
L'espace de début dans "clear & & tmux clear-history" empêche la commande d'être écrite dans le fichier d'historique (à condition que vous ayez votre configuration shell pour traiter les espaces de début de cette façon; google "Hist ignore space" + le nom de votre shell pour plus d'informations). J'aime avoir cette commande affiche pas dans mon histoire, car c'est plus en ligne avec ctrl-k dans le Terminal.
Les premiers send-keys C-u et send-keys C-k effacera tout ce qui est actuellement tapé à l'invite pour s'assurer que le "clear && tmux clear-history" est réussi (par exemple, si vous avez tapé "ABCDEFG" à l'invite et que votre curseur est entre le D et le E, cela garantit que "ABCD clear && tmux clear-historyEFG" n'est pas envoyé au shell, ce qui échouerait).
L'envoyer-touches "Haut" et le dernier envoyez-clés C-u efface les derniers articles de vos coquilles histoire interne. Même avec l'espace de fuite mentionné ci dessus l'histoire interne de la coquille inclura le " clair ..." ligne. Envoi et Ctrl-u se débarrasse de cela.
Enfin, dans iTerm, je mets ctrl-k pour mapper ctrl-a k (j'ai mon préfixe tmux défini sur ctrl-a), donc je peux taper ctrl-k ce que mes mains veulent faire de tant d'années de le faire. Je fais cela, en allant à iTerm > Préférences > profils > clés et en ajoutant un raccourci pour envoyer le code hexadécimal "0x01 0x6B". Il y a un excellent article ici qui donne plus d'informations sur l'utilisation des codes hexadécimaux avec tmux et iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Cela me donne à peu près ctrl-k avec tmux. La seule chose qui me gêne encore est que le vrai ctrl-k sans tmux n'a pas de problèmes si vous avez actuellement quelque chose tapé à l'invite et conservera ce que vous avez tapé tout en effaçant l'écran. Comme mentionné, cette approche doit effacer ce qui est tapé de sorte que le " clair ..."la commande n'échoue pas. Mais il est sacrément proche!!!!
Donc, j'utilise l'approche de plu d'en haut pendant un certain temps, mais j'en ai marre de ses limites (fondamentalement, le ⌃L
passé n'a pas de sens à moins d'être redirigé vers un programme qui le comprend.)
J'ai donc amélioré les différentes approches dans différentes réponses à ce thread; bien que complexe, cette approche fonctionne avec les deux shells et autres commandes :
# ⌃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"
Essayez-le avec tail -f /private/var/log/system.log
ou quelque chose!
Mises en garde:
Il y a une note importante ici: c'est invisiblement redimensionner le volet étant effacé, si ce n'est pas un shell. Cela peut déclencher un comportement de redimensionnement dans certaines applications de ligne de commande écoutant SIGWINCH
es; mais mon raisonnement est que ce n'est pas un gros problème, car ce sont des programmes que vous n'allez probablement pas essayer de ‘Effacer’ de toute façon.
En outre, la situation de citation de shell est déjà un gâchis, et peut devenir facilement plus d'un lors de l'intégration #{pane_current_command}
, alors faites attention, vous devrez peut-être modifier cela en fonction de votre paramètre default-command
.
La même chose s'applique à mon test de la fin de cette commande correspondant à "sh"
; Si vous avez un default-command
de quelque chose comme /bin/bash --login
ou quelque chose de compliqué impliquant exec
, la commande réelle peut ne pas se terminer par "sh"
; utilisez ⌃B :
pour exécuter display-message '#{pane_current_command}'
Si vous voulez voir ce qui est testé.
Après beaucoup de recherche et de temps passé. J'ai trouvé le meilleur moyen pour moi sur zsh et terminal.app
J'utilise prefix-c
pour effacer l'écran et prefix-C
pour effacer l'historique et le tampon de défilement et ne laissant aucune ligne au-dessus parce que je trouve cela ennuyeux.
Sans 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
Avec 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
Trouvé cela fonctionne mieux dans TMUX 2.6, effaçant l'écran, défilement, mais en gardant l'invite affichée après.
Utilise Ctrl-L
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Ctrl-L est utilisé dans les applications de console pour redessiner l'écran. J'ai trouvé que lorsqu'il est lié à send-keys -R
, les touches fléchées ne fonctionneraient plus correctement dans certaines applications (par exemple vim, mc).
Pour conserver la fonctionnalité redessiner dans les applications de console, j'ai utilisé:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Cela nécessite que l'option tmux alternate-screen
soit activée (ce qui est par défaut).