Tmux 拆分 window 并激活一个 python virtualenv

Tmux split window and activate a python virtualenv

我最喜欢的python开发环境是:

每个 pan 都应该 运行 一个 python virtualenv(使用 virtualenvwrapper)。所以这里是我必须键入以设置我的环境的命令列表:

➜  ~ workon some_env
➜  ~ tmux splitw -h -l90
➜  ~ workon some_env
➜  ~ tmux splitw -v -p50
➜  ~ workon some_env

不幸的是,将这些命令放在脚本中并获取文件会 运行 workon some_env 在同一个盘上执行三次,而不是在每个盘上执行一次。

非常简单,但每次我想设置工作环境时都打字很无聊。

我绑定了一个快捷方式来拆分 window 正确:

bind a source-file ~/.config/tmux/dev-session

此文件 dev-session 包含:

splitw -h -l90
splitw -v -p50

但是,我无法在每个平底锅上自动 运行 workon some_env。我用各种方法解决了这个问题,就是无法解决问题。

splitw "workon some_env"
# Exits immediately as `workon` function terminates

splitw "echo 'workon some_env' | source /dev/stdin"
# Exits immediately as `source` terminates

splitw "workon_args=some_env zsh -f .some_custom_zshrc"
# Where .some_custom_zshrc contains:
#    workon $workon_args
# Does not work since running `workon some_env` from a script
# has no effect on the script caller

splitw "zsh -c 'workon some_env' -i"
# `workon some_env` seems to be executed in a separate environment
# and the virtualenv is no more activated within the interactive shell

我尝试了更多奇特的东西,但我被困在这里。

首先创建所有窗格。

使用发送键将您的命令写入指定的窗格并使用 C-m 执行它们。例如:

tmux send-keys -t development:0.1 "workon some_env" C-m

如果您有三个窗格,那么第二个和第三个将是 SESSION_NAME:0.1SESSION_NAME:0.2

这是我的配置示例:

tmux new-session -s development -n editor -d

tmux split-window -h -t development

tmux select-pane -t development:0.1

tmux split-window -v -t development

tmux send-keys -t development:0.0 "emacs -nw" C-m

tmux send-keys -t development:0.0 f8

tmux send-keys -t development:0.1 "ptpython" C-m

This book 有一个很棒的章节介绍如何使用 Tmux 设置环境。

我做的是 我编辑激活脚本并添加

tmux set-environment VIRTUAL_ENV $VIRTUAL_ENV

之后,在激活脚本中有停用功能,我编辑该功能并添加

tmux set-environment -r VIRTUAL_ENV

在我启动 venv all windows 之后,窗格将在该会话中使用 venv 打开。如果我停用新 windows 将正常打开。