Comment puis-je effacer le tampon de défilement dans Tmux?

Pour info, J'utilise Tmux via L'application Mac OS X Terminal.

134
demandé sur Arslan Ali 2012-05-11 03:55:27

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.

165
répondu juanpaco 2012-05-11 15:06:36

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.

45
répondu z5h 2012-07-17 14:49:10

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.

17
répondu plu 2016-02-25 15:28:05

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.

16
répondu cage433 2013-09-25 20:53:17

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.

8
répondu Jonny Leeds 2018-02-06 15:00:03

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;
5
répondu Brad Parks 2016-06-16 18:48:10

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!!!!

2
répondu Brett 2014-01-02 06:15:42

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é.

2
répondu ELLIOTTCABLE 2017-05-23 11:54:50

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
2
répondu Rahul Katariya 2016-10-20 11:13:21

Pourquoi pas? bind -n C-l send-keys C-l

1
répondu klebervirgilio 2015-02-20 16:58:52

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
1
répondu ideasman42 2017-10-07 08:02:53

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).

0
répondu Phil 2017-10-20 07:01:34