280 votes

Comment puis-je effectuer une recherche dans le tampon de sortie d'un tmux Shell ?

Je n'arrive pas à le faire fonctionner. Comment puis-je rechercher dans le buffer d'un tmux Shell ?

1 votes

Quelle version de tmux ( tmux -V ) ? Je crois que cela a été ajouté dans la version 0.9.

0 votes

@Dennis c'est 1.3-1

1 votes

Trouver la version avec tmux -V ne fonctionne que dans les versions ultérieures. Dans Ubuntu/Debian vous pouvez faire : dpkg -l | grep tmux

419voto

Damian Powell Points 315

recherche du mode de copie

Pour effectuer une recherche dans le tmux tampon d'histoire pour la fenêtre actuelle, appuyez sur Ctrl - b [ pour entrer copy mode .

Si vous utilisez des liaisons de touches emacs (par défaut), appuyez sur Ctrl - s puis tapez la chaîne à rechercher et appuyez sur Enter . Appuyez sur n pour rechercher à nouveau la même chaîne. Appuyez sur Shift - n pour la recherche inverse. Appuyez sur Escape deux fois pour quitter copy mode . Vous pouvez utiliser Ctrl - r pour effectuer une recherche dans le sens inverse. Notez que, puisque tmux est en charge du clavier dans copy mode , Ctrl - s fonctionne indépendamment de la stty ixon (que j'aime avoir comme stty -ixon pour activer les recherches en avant dans Bash).

Si vous utilisez des liaisons de touches vi ( Ctrl - b:set-window-option -g mode-keys vi ), appuyez sur / puis tapez la chaîne à rechercher et appuyez sur Enter . Appuyez sur n pour rechercher à nouveau la même chaîne. Appuyez sur Shift - n pour une recherche inverse comme en mode emacs. Appuyez sur q deux fois pour quitter copy mode . Vous pouvez utiliser ? pour effectuer une recherche dans le sens inverse.

find-window

Si vous voulez passer à une fenêtre en fonction de quelque chose qui y est affiché (cela inclut également les noms et les titres des fenêtres, mais pas l'historique), (en commençant avec plus d'une fenêtre ouverte) appuyez sur Ctrl - b f puis tapez la chaîne à rechercher et appuyez sur Enter . Vous passerez à une fenêtre contenant ce texte s'il est trouvé. Si plusieurs fenêtres correspondent, vous verrez une liste dans laquelle vous pourrez faire votre choix.

3 votes

Comment puis-je définir le style de reliure ? (emacs vs vi)

2 votes

@DanielQue : Jetez un coup d'œil à la page de manuel de tmux et cherchez "mode-keys" et "status-keys". Ce sont des sous-commandes qui vous permettent de définir le style de liaison. Alternativement, il pourrait être plus simple de définir une variable d'environnement ( EDITOR o VISUAL ) au style que vous souhaitez avant de lancer tmux .

7 votes

Merci, j'ai réussi à le faire fonctionner avec set-window-option -g mode-keys vi dans mon .tmux.conf . Mais j'étais curieux de l'alternative de la variable d'environnement et je n'ai pas réussi à la faire fonctionner. Est-ce une variable d'environnement Shell, ou une variable d'environnement tmux qui doit être définie dans le fichier conf ?

29voto

Passez en mode copie et commencez à chercher en une seule fois

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

vous permet de le faire :

 Ctrl + B /

et commencez à taper le terme recherché, qui sera recherché vers le haut (les dernières lignes en premier).

Dump dans un fichier et utiliser vim

Quand les choses deviennent plus complexes, je veux juste utiliser un bon éditeur : 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 P vide la mémoire tampon dans un fichier, et ensuite je.. :

vim /tmp/tmux

Nous pouvons automatiser encore plus les choses en ouvrant automatiquement vim également. comme suggéré par pkfm :

bind-key v 'capture-pane' \; \
  capture-pane -S - \; \
  save-buffer /tmp/tmux \; \
  delete-buffer \; \
  send-keys Escape 'ddivim /tmp/tmux' Enter

Cela suppose que votre Shell est en mode vi de sorte que :

  • L'échappement passe en mode normal
  • dd efface toute commande existante
  • i passe en mode insertion
  • puis nous exécutons vim /tmp/tmux

Testé dans tmux 3.0.

0 votes

Comment faire pour que le nom du fichier soit demandé (pour ne pas avoir à coder en dur) ? /tmp/tmux ) ?

0 votes

@PeeyushKushwaha désolé mais mon tmux fu n'est pas si bon, je devrais aller sur google, faites moi savoir si vous trouvez.

1 votes

Aller plus loin et intégrer le vim dans le cadre de la tmux lier et automatiser une recherche à rebours depuis le bas du fichier pour la dernière invite Shell afin de revenir à la dernière commande : bind-key V 'capture-pane' \; capture-pane -S - \; save-buffer /tmp/tmux \; delete-buffer \; send-keys Escape 'ivim "+normal G" +"?^> " /tmp/tmux' Enter . ici, PS1 es > . notez l'espace de fin de ligne, ainsi que l'élément i avant vim pour entrer dans le mode insertion où le Shell utilise vi les fixations. changez en fonction de vos besoins.

2voto

mosh Points 287

Vous pouvez utiliser vim pour afficher/éditer/rechercher/sauvegarder le journal de l'écran, plier le journal à chaque invite 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 backslash pour chaque backslash dans la 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 la 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 -'

1voto

jturi Points 111

Voici une solution que j'ai trouvée.

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

# 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 p dans mon cas Ctrl+a p Vous pouvez modifier bind p à votre combinaison de touches préférée.

D'abord, le mien ne fonctionnait pas parce que j'écrasais bind p dans une autre ligne, alors je l'ai juste commenté.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X