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

NES*_*NES 251 search tmux

我不能让它工作。如何搜索 tmux shell 的缓冲区?

Den*_*son 382

复制模式搜索

要在tmux历史缓冲区中搜索当前窗口,请按Ctrl-b [进入copy mode

如果您使用的是 emacs 键绑定(默认),请按Ctrl-s然后键入要搜索的字符串并按Enter。按n可再次搜索相同的字符串。按Shift-n进行反向搜索。按Escape两次退出copy mode。您可以使用Ctrl-r反向搜索。请注意,因为tmuxcopy 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。如果找到,您将切换到包含该文本的窗口。如果有多个窗口匹配,您将看到一个可供选择的列表。

  • 谢谢,我让它在我的 `.tmux.conf` 中使用 `set-window-option -g mode-keys vi`。但是我对环境变量替代方案很好奇,无法让它发挥作用。它是shell环境变量,还是必须在conf文件中设置的tmux环境变量? (7认同)
  • 如何设置装订样式?(emacs 与 vi) (3认同)
  • @DanielQue:查看 tmux 手册页并搜索“mode-keys”和“status-keys”。这些是允许您设置绑定样式的子命令。或者,在启动 `tmux` 之前将环境变量(`EDITOR` 或 `VISUAL`)设置为您想要的样式可能更简单。 (2认同)
  • @DanielQue:shell 环境变量。它需要像这样导出或放置在 tmux 的环境中:`VISUAL=vi tmux` (2认同)

Cir*_*郝海东 22

进入复制模式,一键开始搜索

bind-key / copy-mode \; send-key ?
Run Code Online (Sandbox Code Playgroud)

允许您只做:

 Ctrl + B /
Run Code Online (Sandbox Code Playgroud)

并开始输入搜索词,这将搜索(最先搜索最新行)。

转储到文件并使用 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
Run Code Online (Sandbox Code Playgroud)

现在P将缓冲区转储到一个文件中,然后我只是:

vim /tmp/tmux
Run Code Online (Sandbox Code Playgroud)

我们可以通过自动打开 vim 以及pkfm 的建议来进一步自动化:

bind-key v 'capture-pane' \; \
  capture-pane -S - \; \
  save-buffer /tmp/tmux \; \
  delete-buffer \; \
  send-keys Escape 'ddivim /tmp/tmux' Enter
Run Code Online (Sandbox Code Playgroud)

这假设您的 shell处于 vi 模式,因此:

  • 逃生进入正常模式
  • dd 清除任何现有命令
  • i 进入插入模式
  • 然后我们运行 vim /tmp/tmux

在 tmux 3.0 中测试。