Come posso cercare nel buffer di output di una shell tmux?


180

Non riesco a farlo funzionare. Come posso cercare il buffer di una shell tmux?


1
Quale versione di tmux( tmux -V)? Credo che questo sia stato aggiunto nella versione 0.9.
Dennis Williamson,

@Dennis è 1.3-1
NES

1
Trovare la versione con tmux -Vfunziona solo nelle versioni successive. In Ubuntu / Debian puoi fare: dpkg -l | grep tmux
Niels Bom il

Risposte:


275

ricerca in modalità copia

Per cercare nel tmuxbuffer della cronologia la finestra corrente, premere Ctrl- b [per accedere copy mode.

Se stai usando le associazioni dei tasti emacs (impostazione predefinita), premi Ctrl- squindi digita la stringa da cercare e premi Enter. Premere nper cercare nuovamente la stessa stringa. Premere Shift- nper la ricerca inversa. Premere Escapedue volte per uscire copy mode. Puoi usare Ctrl- rper cercare nella direzione opposta. Si noti che poiché ha il tmuxcontrollo della tastiera in copy mode, Ctrl- sfunziona indipendentemente stty ixondall'impostazione (che mi piace avere stty -ixonper abilitare le ricerche in avanti in Bash).

Se si utilizzano i tasti di associazione vi ( Ctrl- b:set-window-option -g mode-keys vi), premere, /quindi digitare la stringa da cercare e premere Enter. Premere nper cercare nuovamente la stessa stringa. Premere Shift- nper la ricerca inversa come in modalità emacs. Premere qdue volte per uscire copy mode. Puoi usare ?per cercare nella direzione opposta.

find-window

Se vuoi passare a una finestra in base a qualcosa visualizzato in essa (questo include anche nomi e titoli di finestre ma non cronologia), (a partire da più di una finestra aperta) premi Ctrl- b fquindi digita la stringa da cercare e premi Enter. Passerai a una finestra contenente quel testo se viene trovato. Se più di una finestra corrisponde, verrà visualizzato un elenco tra cui selezionare.


3
Come posso impostare lo stile di rilegatura? (emacs vs vi)
Daniel Que,

2
@DanielQue: dai un'occhiata alla pagina man di tmux e cerca "mode-keys" e "status-keys". Questi sono sotto-comandi che ti consentono di impostare lo stile di rilegatura. In alternativa, potrebbe essere più semplice impostare una variabile di ambiente ( EDITORo VISUAL) sullo stile desiderato prima di iniziare tmux.
Dennis Williamson,

6
Grazie, ho avuto modo di lavorare con il set-window-option -g mode-keys vimio .tmux.conf. Ma ero curioso dell'alternativa alla variabile d'ambiente e non riuscivo a farlo funzionare. È una variabile di ambiente shell o una variabile di ambiente tmux che deve essere impostata nel file conf?
Daniel Que,

2
@DanielQue: una variabile di ambiente shell. Dovrà essere esportato o inserito nell'ambiente di tmux in questo modo:VISUAL=vi tmux
Dennis Williamson

1
Si noti inoltre che non esiste ancora una ricerca regex, ecco un problema aperto su sourceforge.net/p/tmux/tickets/9
Elijah Lynn,

7

Entra in modalità copia e inizia la ricerca in una volta sola

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

ti permette di fare solo:

 Ctrl + B /

e inizia a digitare il termine di ricerca.

Scarica in un file e usa vim

Quando le cose diventano più coinvolte, voglio solo usare un editor appropriato: 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

Ora Pscarica il buffer su un file, e poi solo:

vim /tmp/tmux

Testato in tmux 2.6.


Come faccio a richiedere questo prompt per il nome file (quindi non devo codificare /tmp/tmux)?
Peeyush Kushwaha,

@PeeyushKushwaha scusa ma il mio tmux fu non è così buono, dovrei google, fammi sapere se lo scopri.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1

Puoi usare vim per visualizzare / modificare / cercare / salvare il registro dello schermo, piegare il registro ad ogni prompt di bash:

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

Regola regex in base al tuo prompt, usa quattro barre rovesciate per ogni barra rovesciata in regex.

O metti la funzione vim in ~ / .vimrc:

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

E in ~ / .bashrc aggiungi la data al prompt, se hai molti log da cercare. per esempio

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

0

Ecco una soluzione che ho trovato.

Puoi anche modificare il percorso e il nome file di destinazione:

# 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'

Dopo aver ricaricato il file tmux config, è possibile premere prefix pnel mio caso Ctrl+a p È possibile passare bind palla combinazione di tasti preferita.

La mia prima non funzionava perché sovrascrivevo bind pin un'altra riga, quindi l'ho solo commentato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.