在 Tmux 中切换窗格

在 Tmux 中切换窗格

在开发过程中,我通常会打开以下窗格:

+---------------------------+
|               |           |
|               |           |
|               |   Term1   |
|               |           |
|      Vim      |-----------|
|               |           |
|               |           |
|               |   Term2   |
|               |           |
|               |           |
+---------------------------+

我已<F2>使用以下映射打开下方的小分割Vim来显示tig

bind-key -n F2 split-window -v -t 1 -l 25 -c "#{pane_current_path}" tig status

结果是:

+---------------------------+
|               |           |
|               |           |
|               |   Term1   |
|      Vim      |           |
|               |-----------|
|               |           |
|---------------|           |
|               |   Term2   |
|      Tig      |           |
|               |           |
+---------------------------+

这对于创建和聚焦窗格非常有用,但我希望能够<F2>再次按下以关闭窗格,无论该窗格是否被选中。这样我就可以按下来<F2>切换Tig窗格是否打开。

到目前为止,我在玩这个游戏时遇到的挑战是:

  • kill-pane -t "{bottom-left}"Vim如果Tig窗格不存在,则会删除该窗格
  • kill-pane -t "{down-of}"Vim如果选择了窗格,将会关闭该窗格Tig(它会返回到顶部)
  • 我不确定如何根据窗格当前是否打开来有条件地运行kill-pane或。split-windowTig

任何帮助,将不胜感激!

答案1

split-window 可以显示窗格 ID,因此您可以保存它并使用它来关闭窗格 - ID 始终是唯一的,因此您永远不会关闭错误的窗格。您需要一些 sh,一个用于打开窗格并将 ID 存储在用户选项中,类似于(未经测试):

bind A run-shell 'P=$(tmux splitw -PF'#{pane_id}' -- mycommand); tmux set -w @myspecialpane "$P"'

还有一个可以杀死它的方法,例如:

bind B run-shell 'P=$(tmux show -wqv @myspecialpane); [ -n "$P" ] && tmux killp -t$P'

实际上,由于您希望它们是相同的键,因此您需要更复杂一些,并检查窗格是否已经存在 - 我会编写一个小脚本并从您的键绑定中使用 run-shell 调用它,如下所示(也未测试):

P=$(tmux show -wqv @myspecialpane)
if [ -n "$P" ] && tmux lsp -F'#{pane_id}'|grep -q ^$P; then
     tmux killp -t$P
     tmux set -wu @myspecialpane
else
     P=$(tmux splitw -PF'#{pane_id}' -- mycommand)
     tmux set -w @myspecialpane "$P"
fi

相关内容