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?

NES
fonte
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.

Dennis Williamson
fonte
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.

Ciro Santilli adicionou uma nova foto
fonte
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 -'         
mosh
fonte
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.

jturi
fonte