Tmux拆分窗口并激活python virtualenv

时间:2016-07-12 10:05:16

标签: python linux shell virtualenv tmux

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

  • vim的一个大左撇子
  • 右侧的两个小平底锅用于交互式控制台

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

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

将这些命令放入脚本并获取文件遗憾的是,在同一个平底锅上运行workon some_env三次而不是在每个平底锅上运行一次。

非常简单,但每次我想设置一个工作环境时输入都很无聊。

我绑定了一个快捷方式来拆分窗口:

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

我尝试了更多异国情调的东西,但在这里我被卡住了。

2 个答案:

答案 0 :(得分:4)

首先创建所有窗格。

使用send-keys将命令写入指定的窗格并使用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设置环境的伟大章节。

答案 1 :(得分:0)

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

tmux set-environment VIRTUAL_ENV $VIRTUAL_ENV

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

tmux set-environment -r VIRTUAL_ENV

这样,在我启动venv之后,所有窗口和窗格将在该会话中打开并带有venv。如果我停用,则新窗口将正常打开。