Pour info, j'utilise Tmux via l'application Mac OS X Terminal.
Pour info, j'utilise Tmux via l'application Mac OS X Terminal.
Réponses:
Cette même question me préoccupe depuis un certain temps. Voici le meilleur que j'ai trouvé. Mettez ceci dans votre fichier .tmux.conf:
bind -n C-k clear-history
Cela lie ctrl-k à la commande tmux clear-history. Le -n après la liaison permet de ne pas avoir à é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, j'obtiens un joli combo ctrl-l, ctrl-k, qui déplace tout le tampon de défilement hors de 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 touche de Terminal, iTerm ou Konsole pour l'effacer, mais c'est un monde meilleur que de taper en clair tout le temps.
bind k send-keys "clear"\; send-keys "Enter"
pour la partie de compensation, mais l'utilisation de la fonction intégrée ctrl+l
est plus simple, et clear-history
se débarrasser de l'historique de défilement est un bon ajout.
Comme @juanpaco l'a correctement indiqué, clear-history
est la commande pour effacer le tampon de défilement.
J'ajouterai que j'aime aussi effacer ce qui est à l'écran dans la même commande. L'émission d'une send-keys -R
réinitialisation (efface) l'écran, j'utilise donc ce qui suit dans mon.tmux.conf
bind-key b send-keys -R \; clear-history
Cela efface l'écran ET la mémoire tampon de défilement.
send-keys
: "Le drapeau -R provoque la réinitialisation de l'état du terminal." Vous avez probablement juste besoin de mettre à jour.
bind -n C-l send-keys C-l \; clear-history
clear-history
commande, appuyez sur Ctrl+B
, puis démarrez la commande avec deux points ( :
).
send-keys -R C-l \; clear-history
.
Chaque réponse ici parle de l'ajout de nouvelles liaisons de touches.
Si vous voulez juste le faire occasionnellement, vous n'avez pas du tout besoin de cartographie ...
Le préfixe est par défaut <Ctrl-b>
Tapez simplement <prefix>:
dans le volet approprié, puis tapezclear-history
et appuyez sur Entrée.
Une des choses intéressantes à propos de tmux est que vous pouvez simplement exécuter l'une des commandes comme celle-ci ... ou les exécuter dans un shell / script comme elles tmux command
... ou créer un raccourci clavier pour elles.
cle
, puis la saisie semi-automatique avec <tab>
à la première fois, puis à la deuxième fois utiliser <up arrow>
pour accéder à l'entrée précédente. De cette façon, c'est assez rapide.
<Ctrl-b> the
appuyé sur la touche c` est définie pour créer une nouvelle fenêtre.
:
dessus , cela vous donne une invite interactive - c'est là que vous tapez 'c'
Si vous souhaitez 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.
tail -f some.log
, n'est-ce pas? Y a-t-il un moyen de combiner ctrl-Z
avec cela? Peut sembler bien faire les choses.
J'ai trouvé que l'utilisation 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
ne parvient pas à effacer le texte actuel de l'écran de l'historique - la commande clear-history semble s'exécuter dans un thread séparé pour envoyer les touches.
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Bien 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 écran et la mémoire tampon de défilement.
Tout ce que c'est:
cls
clear;
tmux clear-history;
J'ai trouvé que cela fonctionne mieux dans TMUX 2.6, en effaçant l'écran, en faisant défiler vers l'arrière, 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 lorsque lié àsend-keys -R
les touches fléchées ne fonctionneraient plus correctement dans certaines applications (par exemple, vim, mc).
Pour conserver la fonctionnalité de rafraîchissement 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 soit activée alternate-screen
(ce qui est par défaut).
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 configuré votre shell pour traiter les espaces de début de cette façon; google "hist ignore space" + le nom de votre shell pour plus Info). J'aime que cette commande n'apparaisse pas dans mon historique car elle est plus en ligne avec ctrl-k dans le terminal.
Les premières touches d'envoi Cu et les touches d'envoi Ck effaceront tout ce qui est actuellement tapé à l'invite pour s'assurer que "clear && tmux clear-history" est réussi (par exemple, si vous avez tapé "ABCDEFG" à l'invite et avez votre curseur entre le D et le E, cela garantit que "ABCD clear && tmux clear-historyEFG" n'est pas envoyé au shell, ce qui échouerait).
Les touches d'envoi "Up" et les dernières touches d'envoi Cu effacent les derniers éléments de l'historique interne de votre shell. Même avec l'espace de fin mentionné ci-dessus, l'historique interne du shell inclura la ligne "clear ...". L'envoi et Ctrl-u s'en débarrasse.
Enfin, dans iTerm, j'ai défini ctrl-k pour mapper sur ctrl-a k (mon préfixe tmux est défini sur ctrl-a), donc je peux taper ctrl-k, ce que mes mains veulent faire après tant d'années de travail alors. Je fais cela, en allant dans 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 dérange encore un peu, c'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é pour que la commande "effacer ..." n'échoue pas. Mais c'est sacrément proche!
pourquoi pas? bind -n C-l send-keys C-l
-n C-l
dit en gros «attraper ça», puis vous passez immédiatement la même chose à travers. (c'est-à-dire qu'il s'agit d'un non-op.)… Deuxièmement, votre intention est désactivée, car ⌃L
efface l'écran , pas le défilement arrière: si vous appuyez sur ⌃B [
puis faites défiler vers le haut, vous verrez que tout le défilement est toujours enregistré; le but de cette question est de clarifier ce scrollback (de tmux), pas le terminal visible.
Après beaucoup de recherches 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 laisser aucune ligne au-dessus parce que je trouve cela ennuyeux.
# 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
Donc, j'ai utilisé plu approche de d'en haut depuis un moment, mais j'en ai eu marre de ses limitations (en gros, le ⌃L
passage n'a aucun 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 fil; bien que complexe, cette approche fonctionne avec les coques 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 avec tail -f /private/var/log/system.log
ou quelque chose!
Il y a une remarque importante ici: il s'agit de redimensionner de manière invisible le volet en cours d'effacement, si ce n'est pas un shell. Cela peut déclencher un comportement de redimensionnement dans certaines applications de ligne de commande à l'écoute de SIGWINCH
es; mais mon raisonnement est que ce n'est pas un gros problème, parce que ce sont des programmes que vous n'essaierez probablement pas de `` nettoyer '' toute façon .
En outre, la situation en citant coquille est déjà un gâchis, et peut facilement devenir plus d'un lors de l' intégration#{pane_current_command}
, alors soyez prudent, vous devrez peut-être modifier cela en fonction de vos default-command
paramètres.
La même chose s'applique à mes tests de la fin de cette correspondance de commande "sh"
; si vous avez default-command
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é.