Comment puis-je rechercher dans le tampon de sortie d'un shell tmux?

180

Je n'arrive pas à faire fonctionner ça. Comment puis-je rechercher le tampon d'un shell tmux?

NDA
la source
1
Quelle version de tmux( tmux -V)? Je crois que cela a été ajouté à la version 0.9.
Dennis Williamson
@Dennis c'est 1.3-1
NDA
1
Trouver la version avec tmux -Vne fonctionne que dans les versions ultérieures. Dans Ubuntu / Debian, vous pouvez faire: dpkg -l | grep tmux
Niels Bom

Réponses:

275

recherche en mode copie

Pour rechercher dans la tmuxmémoire tampon de l' historique la fenêtre en cours, appuyez sur Ctrl- b [pour entrer copy mode.

Si vous utilisez les raccourcis clavier emacs (par défaut), appuyez sur Ctrl-, spuis tapez la chaîne à rechercher et appuyez sur Enter. Appuyez sur npour rechercher à nouveau la même chaîne. Appuyez sur Shift- npour une recherche inversée. Appuyez Escapedeux fois pour quitter copy mode. Vous pouvez utiliser Ctrl- rpour rechercher en sens inverse. Notez que depuis tmuxest en contrôle du clavier dans copy mode, Ctrl- sfonctionne quel que soit le stty ixonréglage (ce que j'aime bien stty -ixonpour permettre les recherches en avant dans Bash).

Si vous utilisez les raccourcis-clavier de vi ( Ctrl- b:set-window-option -g mode-keys vi), appuyez sur /puis tapez la chaîne à rechercher et appuyez sur Enter. Appuyez sur npour rechercher à nouveau la même chaîne. Appuyez sur Shift- npour une recherche inversée comme en mode Emacs. Appuyez qdeux fois pour quitter copy mode. Vous pouvez utiliser ?pour rechercher dans le sens inverse.

fenêtre de recherche

Si vous souhaitez basculer vers une fenêtre basée sur quelque chose qui y est affiché (cela inclut également les noms et les titres de la fenêtre mais pas l'historique), (en commençant par plus d'une fenêtre ouverte), appuyez sur Ctrl- b ftapez la chaîne à rechercher et appuyez sur la touche Enter. Vous serez basculé vers une fenêtre contenant ce texte s'il est trouvé. Si plus d'une fenêtre correspond, vous verrez une liste de sélection.

Dennis Williamson
la source
3
Comment puis-je définir le style de reliure? (emacs vs vi)
Daniel Que
2
@DanielQue: jetez un coup d'œil à la page de manuel de tmux et recherchez "mode-keys" et "status-keys". Ce sont des sous-commandes qui vous permettent de définir le style de reliure. Sinon, il peut être plus simple de définir une variable d’environnement ( EDITORou VISUAL) sur le style souhaité avant de commencer tmux.
Dennis Williamson
6
Merci, je l 'ai eu à travailler set-window-option -g mode-keys vidans mon .tmux.conf. Mais j'étais curieux de connaître la variable alternative d'environnement et je ne pouvais pas le faire fonctionner. Est-ce une variable d'environnement shell ou une variable d'environnement tmux qui doit être définie dans le fichier conf?
Daniel Que
2
@DanielQue: une variable d'environnement shell. Il devra être exporté ou placé dans l'environnement de tmux comme suit:VISUAL=vi tmux
Dennis Williamson
1
Notez également qu’il n’ya pas encore de recherche regex, voici un numéro en suspens sourceforge.net/p/tmux/tickets/9
Elijah Lynn
7

Passez en mode copie et lancez la recherche en une fois

bind-key / copy-mode \; send-key ?

vous permet de faire juste:

 Ctrl + B /

et commencez à taper le terme recherché.

Dump dans un fichier et utilisez vim

Lorsque les choses se compliquent, je veux juste utiliser un éditeur approprié: https://unix.stackexchange.com/questions/26548/write-all-tmux-scrollback-to-a-file

bind-key P 'capture-pane' \; capture-pane -S - \; save-buffer /tmp/tmux \; delete-buffer

Maintenant Pvide le tampon dans un fichier, puis je viens:

vim /tmp/tmux

Testé dans tmux 2.6.

Ciro Santilli 改造 心心
la source
Comment créer cette invite pour le nom de fichier (afin que je n'ai pas à coder en dur /tmp/tmux)?
Peeyush Kushwaha
@ PeeyushKushwaha désolé mais mon tmux fu n'est pas si bon, je devrais aller sur Google, laissez-moi savoir si vous le découvrez.
Ciro Santilli a été ajouté
1

Vous pouvez utiliser vim pour afficher / modifier / rechercher / enregistrer le journal d'écran, pliez le journal à chaque invite de bash:

tmux capture-pane -pS -1000000 |
  vim +":setl fen fdm=expr fde=getline(v:lnum)=~'^\\\\S\\+\\\\$\\\\s'?'>1':1"  -  

Ajustez la regex en fonction de votre invite, utilisez quatre barres obliques inverses pour chaque barre oblique inversée dans regex.

Ou mettez la fonction vim dans ~ / .vimrc:

command!           MoshFoldTmuxLog :setl fen fdm=expr
  \   fde=getline(v:lnum)=~'^\\S\\+\\$\\s'?'>1':1 

Et dans ~ / .bashrc, ajoutez une date à l’invite, si vous avez beaucoup de journaux à parcourir. par exemple

PS1='\u@\h:\w:\D{%F-%T}$?:\$ ' # user-host-pwd-date-time-errno 
alias tmux-log='tmux capture-pane -pS -1000000 | vi +MoshFoldTmuxLog -'         
mosh
la source
0

Voici une solution que j'ai trouvée.

Vous pouvez également modifier le chemin cible et le nom du fichier:

# Save screen content to file
bind p command-prompt -p 'Save history to:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

Après avoir rechargé le fichier de configuration tmux, vous pouvez appuyer sur prefix pdans mon cas. Ctrl+a p Vous pouvez modifier bind pla combinaison de touches de votre choix.

Premièrement, le mien ne fonctionnait pas parce que je remplaçais bind pune autre ligne, alors je me suis contenté de le commenter.

jturi
la source