在2个tmux布局之间切换

时间:2016-05-29 15:50:12

标签: vim tmux

我经常在tmux会话中运行Vim,我可以在相邻的窗格中运行测试。在较小的显示器上,我要么牺牲了比我想要的更多的Vim屏幕空间,要么让测试窗格太小而无法读取完整的结果(如果一切都过去就没问题,但是当出现故障并且我需要时则不行看详细信息)。

然后我的工作流程变为:

  • 从Vim内部触发测试
  • 切换到测试窗格(last-pane
  • 缩放窗格占据整个窗口(resize-pane -Z
  • 阅读结果
  • 恢复原始布局(resize-pane -Z
  • 切换回Vim窗格(last-pane

我想添加一个键绑定,当我在Vim窗格中时可以使用它来缩放测试窗格(隐藏Vim),并且能够在缩放后使用相同的绑定来恢复原始布局,让我回归到Vim。这就是我想出来的,但我想知道是否有更好的方法可以做到。我必须设置,检查和取消设置环境变量以保存支持使用相同的键绑定来回切换的状态。我还没有弄清楚如何使切换状态特定于窗口(现在,任何多窗口会话在其所有窗口共享状态,因此这不能正常工作)

bind Space if-shell '[ -z "${ALT_PANE_ZOOM+x}" ]' \
                    'select-pane -t :.+; resize-pane -Z; set-environment ALT_PANE_ZOOM 1' \
                    'set-environment -u ALT_PANE_ZOOM; last-pane'

更新: 我发现了一个更简单的解决方案我可以利用-Fwindow_zoomed_flag格式变量,而不是依赖于每个窗口的环境变量:

bind Space if-shell -F '#{window_zoomed_flag}' \
                       'last-pane' \
                       'select-pane -t :.+; resize-pane -Z'

1 个答案:

答案 0 :(得分:0)

在你的tmux.conf中,创建一个keybind:

  1. 保存缩放状态
  2. 切换到最后一个窗格,如果窗格已放大
  3. ,则退出
  4. 根据#1
  5. 中的缩放状态有条件地缩放

    -

    bind key run-shell "tmux setenv zoomed $(tmux display -p '#{window_zoomed_flag}')"\; \
             last-pane\; \
             run-shell "test $(tmux display -p '#{zoomed}') -ne 0 || tmux resize-pane -Z"
    

    请注意,分号命令分隔符上的反斜杠转义是必需的。