Como posso pesquisar no buffer de saída de um shell tmux?


180

Não consigo fazer isso funcionar. Como posso pesquisar no buffer de um shell tmux?


1
Qual versão do tmux( tmux -V)? Eu acredito que isso foi adicionado na versão 0.9.
Dennis Williamson

@Dennis it's 1.3-1
NES

1
Encontrar a versão com tmux -Vfunciona apenas em versões posteriores. No Ubuntu / Debian você pode fazer: dpkg -l | grep tmux
Niels Bom

Respostas:


275

pesquisa no modo de cópia

Para procurar no tmuxbuffer do histórico a janela atual, pressione Ctrl- b [para entrar copy mode.

Se você estiver usando as combinações de teclas emacs (o padrão), pressione Ctrl- se digite a string a ser pesquisada e pressione Enter. Pressione npara procurar a mesma sequência novamente. Pressione Shift- npara pesquisa reversa. Pressione Escapeduas vezes para sair copy mode. Você pode usar Ctrl- rpara pesquisar na direção inversa. Observe que, uma vez que tmuxestá no controle do teclado copy mode, Ctrl- sfunciona independentemente da stty ixonconfiguração (que eu gosto de ter stty -ixonpara ativar as pesquisas avançadas no Bash).

Se você estiver usando as combinações de teclas vi ( Ctrl- b:set-window-option -g mode-keys vi), pressione /e digite a sequência a ser pesquisada e pressione Enter. Pressione npara procurar a mesma sequência novamente. Pressione Shift- npara pesquisa reversa como no modo emacs. Pressione qduas vezes para sair copy mode. Você pode usar ?para pesquisar na direção inversa.

encontrar-janela

Se você deseja alternar para uma janela com base em algo exibido nela (isso também inclui nomes e títulos de janelas, mas não histórico), (começando com mais de uma janela aberta), pressione Ctrl- b fe digite a sequência a ser pesquisada e pressionada Enter. Você será alternado para uma janela que contém esse texto, se ele for encontrado. Se mais de uma janela corresponder, você verá uma lista para selecionar.


3
Como posso definir o estilo de encadernação? (emacs vs vi)
Daniel Que

2
@DanielQue: Dê uma olhada na página de manual do tmux e procure por "mode-keys" e "status-keys". Esses são subcomandos que permitem definir o estilo de encadernação. Como alternativa, pode ser mais simples definir uma variável de ambiente ( EDITORou VISUAL) para o estilo desejado antes de iniciar tmux.
Dennis Williamson

6
Obrigado, eu consegui trabalhar com isso set-window-option -g mode-keys vino meu .tmux.conf. Mas eu estava curioso sobre a alternativa da variável de ambiente e não consegui fazê-la funcionar. É uma variável de ambiente do shell ou uma variável de ambiente tmux que deve ser configurada no arquivo conf?
Daniel Que

2
@DanielQue: uma variável de ambiente do shell. Ele terá de ser exportado ou colocado em envrionment de tmux assim:VISUAL=vi tmux
Dennis Williamson

1
Observe também que não há nenhuma pesquisa regex ainda, aqui é uma questão em aberto sobre ele sourceforge.net/p/tmux/tickets/9
Elias Lynn

7

Entre no modo de cópia e comece a pesquisar de uma só vez

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

permite que você faça exatamente:

 Ctrl + B /

e comece a digitar o termo de pesquisa.

Despejar em um arquivo e usar vim

Quando as coisas ficam mais envolvidas, eu só quero usar um editor adequado: 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

Agora Pdespeja o buffer em um arquivo, e então eu apenas:

vim /tmp/tmux

Testado no tmux 2.6.


Como faço para solicitar esse nome de arquivo (para que eu não precise codificar /tmp/tmux)?
Peeyush Kushwaha 19/10/10

@PeeyushKushwaha desculpe, mas meu tmux fu não é tão bom, eu teria que procurar no google, me avise se você descobrir.
Ciro Santilli # 19/18

1

Você pode usar o vim para visualizar / editar / pesquisar / salvar o log de tela, dobre o log em cada prompt do bash:

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

Ajuste a regex de acordo com o seu prompt, use quatro barras invertidas para cada barra invertida no regex.

Ou coloque a função vim em ~ / .vimrc:

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

E em ~ / .bashrc, adicione data ao prompt, se você tiver muitos logs para pesquisar. por exemplo

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

0

Aqui está uma solução que encontrei.

Você também pode modificar o caminho de destino e o nome do arquivo:

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

Após recarregar o arquivo de configuração do tmux, você pode pressionar prefix pno meu caso. Ctrl+a p Você pode mudar bind ppara a combinação de teclas preferida.

O primeiro meu não estava funcionando porque eu estava substituindo bind pem outra linha, então apenas comentei isso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.