tmux在焦点上调整大小

Ste*_* Lu 8 unix terminal tmux

我希望能够为特定窗格指定辅助大小参数,以便在聚焦窗格时分配新大小,并在退出时返回它.所以,例如

(注意[]表示聚焦的终端光标)

________________
|$ ls  |       |
|a's   |       |
|dir   |       |
|$     |$ []   |
|______|_______|
Run Code Online (Sandbox Code Playgroud)

交换窗格焦点

_______________
|        |    |
|$ ls    |    |
|a's dir |    |
|$ []    |$   |
|________|____|
Run Code Online (Sandbox Code Playgroud)

等等.特别是很酷,因为在最近的tmux版本中调整窗格大小,它可以很好地重新处理内容而不是将其切掉.

在该示例中,左窗格的宽度设置为在聚焦时自动切换为8列,并且在失去焦点时会变窄.注意内容是如何仍然可见的(这是我们为什么喜欢tmux),但是我们仍然可以通过让当前关注的窗格自动扩展来吃掉我们的蛋糕,因此它总是足够大以便进行工作!

我可能会想出一些精心设计的绑定来自动执行resize-pane命令的应用,并使其适合我的愿望.但我希望有一些内置的功能.

跟踪并允许为每个窗格修改辅助的4元组整数是切实可行的.这些指定了resize-pane -L/D/U/R该窗格聚焦时要执行的操作量,以及该窗格散焦时的反向操作.

可能还有其他更合理的配方.

gol*_*das 1

找到了部分解决方案...我的窗格切换与 vim 同步,因此每当我切换切换窗格时,我也会调整 tmux 的大小。

这不是最佳选择,因为 tmux 不会验证当前窗格大小并相应地调整其大小。不管怎样,它工作得很好,因为你可以执行 ctr-h 或 ctrl-k 两次来调整窗格大小。

相关配置如下:

# Sync panes with vi
bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-h) || tmux select-pane -L && tmux resize-pane -R 30"
bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-l) || tmux select-pane -R && tmux resize-pane -L 30"
bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-j) || tmux select-pane -D"
# Move panes up and down, wont resize
bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-k) || tmux select-pane -U"
Run Code Online (Sandbox Code Playgroud)