在开发过程中,我通常会打开以下窗格:
+---------------------------+
| | |
| | |
| | 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-window
Tig
任何帮助,将不胜感激!
答案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