如何像在屏幕中一样在 tmux 中循环浏览窗口内的窗格?

如何像在屏幕中一样在 tmux 中循环浏览窗口内的窗格?

我想将 tmux 窗格移至窗口是同样的问题,但似乎不是。

由于经常使用 GNU screen,我正在寻找 tmux 来做同样的事情。我经常做的事情之一是打开几个不同的窗口,一个在 vim 中打开一些代码,然后打开几个终端窗口来测试代码,有时打开一两个窗口用于各种其他事情。我垂直分割屏幕,通常会将 vim 窗口放在顶部窗格中,然后将其他窗口之一放在底部窗格中。

然后我使用的主要命令是CtrlaTab窗格之间旋转和Ctrlan窗格内的窗口之间旋转。例如,当 vim 在顶部窗格中时,我切换到底部窗格,然后在其他终端之间旋转,执行我需要的任何操作。屏幕始终保持分割状态。

问题是我在 tmux 中找不到与 screen 相当的功能Ctrlan切换窗口似乎在窗格内不起作用,而是完全跳转。如果屏幕被分割,唯一的两个选项似乎是跳转到某个未分割的窗口,然后分割它,或者对窗格进行子分割。两者都不是我正在寻找的。

有什么建议(除了坚持屏幕之外)?

答案1

我相信您正在寻找的是Ctrlb+( , , , )。这些将允许您在窗格之间移动。

答案2

多路复用器屏幕有不同的型号,因此没有完全相同的型号。

屏幕换句话说,拆分可以让您同时显示多个窗口。next( C-a n) 通过分割的活动部分旋转窗口;这使您可以在分割的活动区域中旋转“隐藏”窗口。

多路复用器术语“分割”将一个窗口分成一个或多个窗格。分割窗口的每个部分都是一个单独的窗格,窗格永远不会被隐藏(如果选择了一个窗口(可见),它的所有窗格也是如此),并且一个窗格只能在一个窗口的单个分割中使用(一个窗格可以不能位于多个窗口中,并且不能位于同一窗口的多个分割中)。有一些命令可以在窗口中(或窗口之间)移动窗格,但与next在窗口中移动窗格的方式不同。屏幕


您可以使用如下所示的绑定来安排类似的效果:

bind-key C-n swap-pane -s :+.top \; rotate-window -Ut :+

您可能希望将其放入~/.tmux.conf文件中,但您只需键入/粘贴即可Prefix :将其绑定到当前的服务器实例中。

要使用绑定,请选择“主窗口”,将其拆分,在“主窗口”之后立即创建一个“窗格容器”窗口,然后使用绑定旋转“主窗口”中组中的任何窗格。窗格容器”窗口。

以下是创建设置的方法:

  • 选择一个窗口用作“主窗口”。开始(例如)维姆在里面。

  • 将“主窗口”分成两个窗格。

    例如Prefix "( :split-window)

    您可以使用此窗格作为测试窗口(或日志查看器,或其他)。

  • 在主窗口之后立即创建一个新窗口(“窗格容器”)。

    例如Prefix c( :new-window)

    重要的是,“主窗口”和“窗格容器”窗口的索引之间没有其他窗口(+在绑定命令中使用的窗口说明符中表示“下一个编号较高的窗口”)。

  • 将此窗口拆分为多个窗格。要旋转三个窗格,请将此窗口拆分为两个窗格(第三个窗格是“主窗口”中的窗格)。

    也许你需要一个外壳git,以及用于运行数据库接口的 shell。将每个窗口放入“窗格容器”窗口中的单独窗格中。

  • 切换回“主窗口”。选择您想要“旋转出”的窗格。

    您可以使用Prefix Up// Down/LeftRight窗格之间移动。

  • 调用绑定以将当前窗格与“窗格容器”窗口中的第一个窗格交换,并(“在幕后”)旋转“窗格容器”窗口内的窗格(以便下次运行绑定时,第一个命令与序列中的“下一个”窗格交换)。

    Prefix Control- n(绑定使用 Cn,但您可以将其更改为您喜欢的任何内容)。

  • 要向后滚动窗格,您可以使用以下命令:

绑定键 Cp 交换窗格 -s :+.bottom \;旋转窗口-Dt :+

答案3

使用bind -r,这样您就可以按prefix顺序按一次,然后再按其他键来定位您的窗格。超时可以通过调整repeat-time。查看man tmux

bind -r Tab select-pane -t :.+

如果你更喜欢hjkl

bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R

答案4

ALT这是一个小conf,允许您使用快捷键或SHIFT+移动到另一个窗格或窗口arrow。无需使用前缀键。很舒服!

## NAVIGATION: ############################

# Switch panes 
# Usage: "ALT+arrow keys" (without prefix key)
# from https://gist.github.com/spicycode
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
 
# Switch windows 
# usage: "SHIFT+arrow" (without prefix key)
bind -n S-Left  previous-window
bind -n S-Right next-window

您可能还对以下允许通过鼠标导航窗格的代码感兴趣。 (用法:按键前缀 + m 打开,M 关闭)

## MOUSE CONTROL: #########################
set -g mode-mouse off
set -g mouse-resize-pane off
set -g mouse-select-pane off
set -g mouse-select-window off

# Toggle mouse on 
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'
    
# Toggle mouse off
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'

此配置已在 Tmux 1.6 至 1.9 上进行了测试。

相关内容