Jak mogę wyszukiwać w buforze wyjściowym powłoki tmux?

180

Nie mogę tego uruchomić. Jak mogę przeszukać bufor powłoki tmux?

NES
źródło
1
Jaka wersja tmux( tmux -V)? Uważam, że zostało to dodane w wersji 0.9.
Dennis Williamson
@Dennis jest 1.3-1
NES
1
Znajdowanie wersji z tmux -Vdziała tylko w późniejszych wersjach. W Ubuntu / Debian możesz wykonać: dpkg -l | grep tmux
Niels Bom

Odpowiedzi:

275

wyszukiwanie w trybie kopiowania

Aby przeszukać tmuxbieżące okno w buforze historii, naciśnij Ctrl-, b [aby wejść copy mode.

Jeśli używasz powiązań klawiszy emacs (domyślne), naciśnij Ctrl- snastępnie wpisz ciąg, aby wyszukać i naciśnij Enter. Naciśnij, naby ponownie wyszukać ten sam ciąg. Naciśnij Shift-, naby wyszukać do tyłu. Naciśnij Escapedwukrotnie, aby wyjść copy mode. Możesz użyć Ctrl- rdo wyszukiwania w odwrotnym kierunku. Zauważ, że skoro tmuxma kontrolę nad klawiaturą w copy mode, Ctrl- sdziała niezależnie od stty ixonustawienia (które chcę mieć, stty -ixonaby umożliwić wyszukiwanie do przodu w Bash).

Jeśli używasz powiązań klawiszy vi ( Ctrl- b:set-window-option -g mode-keys vi), naciśnij, /a następnie wpisz ciąg, który chcesz wyszukać, i naciśnij Enter. Naciśnij, naby ponownie wyszukać ten sam ciąg. Naciśnij Shift-, naby wyszukiwać wstecz jak w trybie emacs. Naciśnij qdwukrotnie, aby wyjść copy mode. Możesz użyć ?do wyszukiwania w odwrotnym kierunku.

znajdź okno

Jeśli chcesz przełączyć się na okno oparte na czymś w nim wyświetlanym (obejmuje to także nazwy i tytuły okien, ale nie historię), (zaczynając od otwarcia więcej niż jednego okna) naciśnij Ctrl- b fnastępnie wpisz ciąg, który chcesz wyszukać, i naciśnij Enter. Zostaniesz przełączony do okna zawierającego ten tekst, jeśli zostanie znaleziony. Jeśli pasuje więcej niż jedno okno, zobaczysz listę do wyboru.

Dennis Williamson
źródło
3
Jak ustawić styl wiązania? (emacs vs vi)
Daniel Que
2
@DanielQue: spójrz na stronę podręcznika man tmux i wyszukaj „mode-keys” i „status-keys”. Są to polecenia podrzędne, które pozwalają ustawić styl wiązania. Alternatywnie, może być łatwiej ustawić zmienną środowiskową ( EDITORlub VISUAL) na żądany styl przed rozpoczęciem tmux.
Dennis Williamson,
6
Dzięki, mam go do pracy ze set-window-option -g mode-keys viw moim .tmux.conf. Byłem jednak ciekawy alternatywnej zmiennej środowiskowej i nie mogłem jej uruchomić. Czy jest to zmienna środowiskowa powłoki, czy zmienna środowiskowa tmux, którą należy ustawić w pliku conf?
Daniel Que
2
@DanielQue: Zmienna środowiskowa powłoki. Będzie musiał zostać wyeksportowany lub umieszczony w środowisku tmux w następujący sposób:VISUAL=vi tmux
Dennis Williamson
1
Zauważ również, że nie ma jeszcze wyszukiwania wyrażeń regularnych, oto otwarty problem na nim sourceforge.net/p/tmux/tickets/9
Elijah Lynn
7

Wejdź w tryb kopiowania i rozpocznij wyszukiwanie za jednym razem

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

pozwala zrobić tylko:

 Ctrl + B /

i zacznij wpisywać wyszukiwane hasło.

Zrzuć do pliku i użyj vim

Gdy sprawy się bardziej angażują, chcę po prostu użyć odpowiedniego edytora: 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

Teraz Pzrzuca bufor do pliku, a następnie po prostu:

vim /tmp/tmux

Testowane w tmux 2.6.

Ciro Santilli
źródło
Jak wyświetlić ten monit o nazwę pliku (aby nie trzeba było kodować na stałe /tmp/tmux)?
Peeyush Kushwaha,
@PeeyushKushwaha przepraszam, ale mój tmux fu nie jest tak dobry, musiałbym google, daj mi znać, jeśli się dowiesz.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1

Możesz użyć vima do przeglądania / edycji / wyszukiwania / zapisywania dziennika ekranu, składania dziennika przy każdym znaku zachęty:

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

Dostosuj wyrażenie regularne zgodnie z poleceniem, użyj czterech odwrotnych ukośników dla każdego odwrotnego ukośnika w wyrażeniach regularnych.

Lub umieść funkcję vim w ~ / .vimrc:

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

A w ~ / .bashrc dodaj datę do monitu, jeśli masz wiele dzienników do przeszukania. na przykład

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

Oto rozwiązanie, które znalazłem.

Możesz również zmienić docelową ścieżkę i nazwę pliku:

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

Po przeładowaniu pliku konfiguracyjnego tmux możesz prefix pw moim przypadku nacisnąć. Ctrl+a p Możesz zmienić bind ppreferowaną kombinację klawiszy.

Pierwsza moja nie działała, ponieważ nadpisywałem bind pw innym wierszu, więc to skomentowałem.

jturi
źródło