我使用与此等效的内容恢复项目的常见设置:
setup_file=myproj.tmux
tmux new-session "tmux source-file $setup_file"
我通常认为启动一个新会话然后从中获取命令$setup_file
相当于在新 shell 中手动执行这些 tmux 命令,但事实并非如此!不同之处在于,在采购时,窗口 0 中似乎没有创建任何 shell,因此当我执行neww
此命令时,会创建一个窗口 1,但当所有内容都设置完毕后,窗口 0 会丢失。为了解决这个问题,我执行了split-window
,但我不明白为什么我需要这样做。线索?
myproj.tmux
# window 0 - cli
rename-window 'cli';
split-window # not sure why this is needed to get a shell. Otherwise there is no window 0!
# window 1 - main window in the left pane and 3 minor windows in the right pane
neww
rename-window 'tools'
send-keys 'nvim' C-m # editor
split-window -h -p 40 # build window (webpack, etc)
split-window -v -p 80 # cli
split-window -v -p 50 # test runner?
select-pane -L; # select the left pane; nvim
答案1
但当一切都设置完毕后,窗口 0 丢失了
如果没有可疑的split-window
,则仅在窗口 0 的窗格中运行的代码是tmux source-file $setup_file
($setup_file
已由原始 shell 扩展)。当一切设置完毕后,此命令将终止,因此唯一的窗格将终止,因此窗口将终止。
情况会有所不同
tmux new-session "tmux source-file '$setup_file'; '$SHELL'"
请注意,该命令的引用比原始命令“更好”,但仍然没有正确引用。在 Bash 中,可以通过以下方式实现正确的引用${var@Q}
:
tmux new-session "tmux source-file ${setup_file@Q}; ${SHELL@Q}"