¿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?


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.


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.


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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.