Как я могу искать в выходном буфере оболочки tmux?


180

Я не могу заставить это работать. Как я могу искать в буфере оболочки tmux?


1
Какая версия tmux( tmux -V)? Я считаю, что это было добавлено в версии 0.9.
Деннис Уильямсон

@Dennis это 1.3-1
РЭШ

1
Поиск версии с tmux -Vработами только в более поздних версиях. В Ubuntu / Debian вы можете сделать: dpkg -l | grep tmux
Niels Bom

Ответы:


275

поиск в режиме копирования

Для поиска в tmuxбуфере истории текущего окна нажмите Ctrl- b [для входа copy mode.

Если вы используете привязки клавиш emacs (по умолчанию), нажмите Ctrl-, sзатем введите строку для поиска и нажмите Enter. Нажмите, nчтобы снова найти ту же строку. Нажмите Shift- nдля обратного поиска. Нажмите Escapeдважды, чтобы выйти copy mode. Вы можете использовать Ctrl- rдля поиска в обратном направлении. Обратите внимание, что поскольку tmuxклавиатура находится под контролем copy mode, Ctrl- sработает независимо от stty ixonнастроек (которые мне нравятся, stty -ixonчтобы включить прямой поиск в Bash).

Если вы используете привязки клавиш vi ( Ctrl- b:set-window-option -g mode-keys vi), нажмите, /затем введите строку для поиска и нажмите Enter. Нажмите, nчтобы снова найти ту же строку. Нажмите Shift- nдля поиска в обратном направлении, как в режиме emacs. Нажмите qдважды, чтобы выйти copy mode. Вы можете использовать ?для поиска в обратном направлении.

найти окно

Если вы хотите переключиться на окно на основе чего-либо, отображаемого в нем (это также включает в себя имена и заголовки окон, но не историю), (начиная с открытия более одного окна) нажмите Ctrl- b fзатем введите строку для поиска и нажмите Enter. Вы будете переключены в окно, содержащее этот текст, если он найден. Если более одного окна совпадает, вы увидите список для выбора.


3
Как я могу установить стиль привязки? (emacs vs vi)
Даниэль Цю

2
@DanielQue: взгляните на справочную страницу tmux и найдите «ключи режима» и «ключи состояния». Это подкоманды, которые позволяют вам установить стиль привязки. С другой стороны, может быть проще установить переменную окружения ( EDITORили VISUAL) в стиле, который вы хотите, перед запуском tmux.
Деннис Уильямсон

6
Спасибо, я получил его для работы set-window-option -g mode-keys viв моем .tmux.conf. Но мне было любопытно по поводу альтернативы переменной среды, и я не мог заставить ее работать. Это переменная окружения оболочки или переменная окружения tmux, которую нужно установить в файле conf?
Даниэль Цю

2
@DanielQue: переменная среды оболочки. Его нужно будет экспортировать или поместить в среду tmux следующим образом:VISUAL=vi tmux
Деннис Уильямсон

1
Также обратите внимание, что поиск по регулярным выражениям пока отсутствует, здесь есть открытый вопрос sourceforge.net/p/tmux/tickets/9
Элайджа Линн,

7

Войдите в режим копирования и начните поиск за один раз

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

позволяет делать только:

 Ctrl + B /

и начните вводить поисковый запрос.

Дамп в файл и использовать vim

Когда все становится более сложным, я просто хочу использовать подходящий редактор: 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

Теперь Pдамп буфера в файл, а затем я просто:

vim /tmp/tmux

Протестировано в tmux 2.6.


Как сделать этот запрос для имени файла (чтобы мне не пришлось жестко кодировать /tmp/tmux)?
Peeyush Kushwaha

@PeeyushKushwaha извините, но мой tmux fu не так хорош, я должен был бы Google, дайте мне знать, если вы узнаете это.
Сиро Сантилли 新疆 新疆 中 at 法轮功 六四 事件

1

Вы можете использовать vim для просмотра / редактирования / поиска / сохранения журнала экрана, складывая журнал при каждом запросе bash:

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

Настройте регулярное выражение в соответствии с вашей подсказкой, используйте четыре обратных слеша для каждого обратного слеша в регулярном выражении.

Или поместите функцию vim в ~ / .vimrc:

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

А в ~ / .bashrc добавьте дату к приглашению, если у вас есть много журналов для поиска. например

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

0

Вот решение, которое я нашел.

Вы также можете изменить целевой путь и имя файла:

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

После перезагрузки конфигурационного файла tmux вы можете нажать prefix pв моем случае. Ctrl+a p Вы можете изменить bind pпредпочитаемую комбинацию клавиш.

Первый мой не работал, потому что я переписывал bind pв другой строке, поэтому я просто закомментировал это.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.