如何在tmux shell的输出缓冲区中搜索?


180

我无法使它正常工作。如何搜索tmux shell的缓冲区?


1
tmuxtmux -V)是什么版本?我相信这是在0.9版本中添加的。
丹尼斯·威廉姆森

@丹尼斯1.3-1
NES

1
使用查找版本tmux -V只能在更高版本中使用。在Ubuntu / Debian中,您可以执行以下操作:dpkg -l | grep tmux
Niels Bom

Answers:


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再次搜索相同的字符串。与emacs模式一样,按Shift- n进行反向搜索。按q两次退出copy mode。您可以使用?反向搜索。

查找窗口

如果要基于其中显示的内容(也包括窗口名称和标题但不包括历史记录)切换到窗口,(从打开多个窗口开始)请按Ctrl- b f然后键入要搜索的字符串,然后按Enter。如果找到该文本,您将切换到包含该文本的窗口。如果有多个窗口匹配,您将看到一个列表可供选择。


3
如何设置装订风格?(emacs vs vi)
Daniel Que 2014年

2
@DanielQue:看一下tmux手册页并搜索“ mode-keys”和“ status-keys”。这些是允许您设置绑定样式的子命令。或者,在启动之前将环境变量(EDITORVISUAL)设置为所需的样式可能会更简单tmux
丹尼斯·威廉姆森

6
谢谢,我得到它的工作与set-window-option -g mode-keys vi我的.tmux.conf。但是我对环境变量替代品感到好奇,并且无法使其正常工作。是shell环境变量,还是必须在conf文件中设置的tmux环境变量?
丹尼尔·奎

2
@DanielQue:一个外壳环境变量。需要将其导出或放置在tmux的环境中,如下所示:VISUAL=vi tmux
Dennis Williamson

1
另请注意,尚无正则表达式搜索,这是一个未解决的问题sourceforge.net/p/tmux/tickets/9
Elijah Lynn

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找我,如果您发现它的话,请告诉我。
Ciro Santilli新疆改造中心法轮功六四事件

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为首选的组合键。

First mine无法正常工作,因为我正在bind p另一行覆盖,所以我只是将其注释掉了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.