Vim 在2个tmux布局之间切换

Vim 在2个tmux布局之间切换,vim,tmux,Vim,Tmux,我经常在tmux会话中运行Vim,以便在相邻窗格中运行测试。在一个更小的显示器上,我要么牺牲比我想要的更多的Vim屏幕空间,要么使测试窗格太小,无法读取完整的结果(如果一切都通过了,这很好,但当出现故障时,我需要查看详细信息) 然后,我的工作流程变成: Vim内的触发测试 切换到测试窗格(最后一个窗格) 缩放窗格以占据整个窗口(调整窗格大小-Z) 阅读结果 恢复原始布局(调整窗格大小-Z) 切换回Vim窗格(最后一个窗格) 我想添加一个键绑定,当我在Vim窗格中缩放测试窗格时可以使用它(隐藏

我经常在tmux会话中运行Vim,以便在相邻窗格中运行测试。在一个更小的显示器上,我要么牺牲比我想要的更多的Vim屏幕空间,要么使测试窗格太小,无法读取完整的结果(如果一切都通过了,这很好,但当出现故障时,我需要查看详细信息)

然后,我的工作流程变成:

  • Vim内的触发测试
  • 切换到测试窗格(
    最后一个窗格
  • 缩放窗格以占据整个窗口(
    调整窗格大小-Z
  • 阅读结果
  • 恢复原始布局(
    调整窗格大小-Z
  • 切换回Vim窗格(
    最后一个窗格
我想添加一个键绑定,当我在Vim窗格中缩放测试窗格时可以使用它(隐藏Vim),并且在缩放后可以使用相同的绑定来恢复原始布局,将我返回到Vim。这就是我想到的,但我想知道是否有更好的方法可以做到这一点。我必须设置、检查和取消设置一个环境变量,以保存支持使用相同键绑定来回切换的状态。我还没有弄清楚如何使切换状态特定于某个窗口(目前,任何多窗口会话都在其所有窗口中共享该状态,因此这无法正常工作)

更新: 我找到了一个更简单的解决办法。我可以利用
-F
window\u zoomed\u标志
格式变量,而不是依赖于每个窗口的环境变量:

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

在tmux.conf中,创建一个键绑定,该键绑定:

  • 保存缩放状态
  • 切换到最后一个窗格,如果已放大窗格,则取消缩放
  • 根据#1中的缩放状态有条件地缩放
  • -


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

    在tmux.conf中,创建一个键绑定,该键绑定:

  • 保存缩放状态
  • 切换到最后一个窗格,如果已放大窗格,则取消缩放
  • 根据#1中的缩放状态有条件地缩放
  • -

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

    bind Space if-shell -F '#{window_zoomed_flag}' \
                           'last-pane' \
                           'select-pane -t :.+; resize-pane -Z'
    
    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"