¿Cómo puedo buscar dentro del búfer de salida de un shell tmux?

180

No puedo hacer que esto funcione. ¿Cómo puedo buscar el búfer de un shell tmux?

NES
fuente
1
¿Qué versión de tmux( tmux -V)? Creo que esto se agregó en la versión 0.9.
Dennis Williamson
@Dennis es 1.3-1
NES
1
Encontrar la versión con tmux -Vfunciona solo en versiones posteriores. En Ubuntu / Debian puedes hacer: dpkg -l | grep tmux
Niels Bom

Respuestas:

275

búsqueda en modo copia

Para buscar en el tmuxbúfer de historial la ventana actual, presione Ctrl- b [para ingresar copy mode.

Si está utilizando las combinaciones de teclas de emacs (el valor predeterminado), presione Ctrl- sluego escriba la cadena para buscar y presione Enter. Presione npara buscar la misma cadena nuevamente. Presione Shift- npara la búsqueda inversa. Presione Escapedos veces para salir copy mode. Puede usar Ctrl- rpara buscar en la dirección inversa. Tenga en cuenta que ya tmuxtiene el control del teclado en copy mode, Ctrl- sfunciona independientemente de la stty ixonconfiguración (que me gustaría tener como stty -ixonpara permitir búsquedas hacia adelante en Bash).

Si está utilizando las combinaciones de teclas vi ( Ctrl- b:set-window-option -g mode-keys vi), presione, /luego escriba la cadena para buscar y presione Enter. Presione npara buscar la misma cadena nuevamente. Presione Shift- npara la búsqueda inversa como en el modo emacs. Presione qdos veces para salir copy mode. Puede usar ?para buscar en la dirección inversa.

encontrar-ventana

Si desea cambiar a una ventana basada en algo que se muestra en ella (esto también incluye los nombres y títulos de las ventanas pero no el historial), (comenzando con más de una ventana abierta) presione Ctrl- b fluego escriba la cadena para buscar y presione Enter. Se lo cambiará a una ventana que contiene ese texto si se encuentra. Si coincide más de una ventana, verá una lista para seleccionar.

Dennis Williamson
fuente
3
¿Cómo puedo configurar el estilo de encuadernación? (emacs vs vi)
Daniel Que
2
@DanielQue: eche un vistazo a la página de manual de tmux y busque "teclas de modo" y "teclas de estado". Esos son subcomandos que le permiten establecer el estilo de enlace. Alternativamente, puede ser más sencillo establecer una variable de entorno ( EDITORo VISUAL) al estilo que desee antes de comenzar tmux.
Dennis Williamson
66
Gracias, lo tengo para trabajar set-window-option -g mode-keys vien mi .tmux.conf. Pero tenía curiosidad sobre la alternativa variable de entorno y no pude hacer que funcionara. ¿Es una variable de entorno de shell, o una variable de entorno tmux que debe establecerse en el archivo conf?
Daniel Que
2
@DanielQue: una variable de entorno de shell. Será necesario exportarlo o colocarlo en el entorno de tmux de esta manera:VISUAL=vi tmux
Dennis Williamson
1
También tenga en cuenta que todavía no hay una búsqueda de expresiones regulares, aquí hay un problema abierto en él sourceforge.net/p/tmux/tickets/9
Elijah Lynn
7

Ingrese al modo de copia y comience a buscar de una vez

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

le permite hacer solo:

 Ctrl + B /

y comienza a escribir el término de búsqueda.

Volcar a un archivo y usar vim

Cuando las cosas se involucran más, solo quiero usar un editor apropiado: 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

Ahora Pvolca el búfer en un archivo, y luego simplemente:

vim /tmp/tmux

Probado en tmux 2.6.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
¿Cómo hago esta solicitud para el nombre de archivo (para que no tenga que codificar /tmp/tmux)?
Peeyush Kushwaha
@PeeyushKushwaha lo siento, pero mi tmux fu no es tan bueno, tendría que buscar en Google, avíseme si lo descubre.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1

Puede usar vim para ver / editar / buscar / guardar el registro de pantalla, doble el registro en cada solicitud de bash:

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

Ajuste la expresión regular según su solicitud, use cuatro barras invertidas para cada barra invertida en expresiones regulares.

O ponga la función vim en ~ / .vimrc:

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

Y en ~ / .bashrc agregue la fecha a la solicitud, si tiene muchos registros para buscar. p.ej

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

Aquí hay una solución que encontré.

También puede modificar la ruta de destino y el nombre de archivo:

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

Después de volver a cargar el archivo de configuración tmux, puede presionar prefix pen mi caso Ctrl+a p . Puede cambiar bind pa su combinación de teclas preferida.

Primero, el mío no funcionaba porque estaba sobrescribiendo bind pen otra línea, así que solo comenté eso.

jturi
fuente