Tmux分割窗口并激活python virtualenv

Ant*_*ard 2 python linux shell virtualenv tmux

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

  • Vim的一个大左锅
  • 右侧的两个小锅用于交互式控制台

每个泛应该运行一个python virtualenv(使用virtualenvwrapper)。因此,这是我必须输入以设置环境的命令列表:

?  ~ workon some_env
?  ~ tmux splitw -h -l90
?  ~ workon some_env
?  ~ tmux splitw -v -p50
?  ~ workon some_env
Run Code Online (Sandbox Code Playgroud)

不幸的是,将这些命令放在脚本中并提供文件源将workon some_env在同一平底锅上运行3次,而不是在每个平底锅上运行一次。

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

我绑定了一个快捷方式来正确地分割窗口:

bind a source-file ~/.config/tmux/dev-session
Run Code Online (Sandbox Code Playgroud)

该文件dev-session包含:

splitw -h -l90
splitw -v -p50
Run Code Online (Sandbox Code Playgroud)

但是,我无法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
Run Code Online (Sandbox Code Playgroud)

我尝试了更多奇特的事情,但是我陷入了困境。

mit*_*ghi 5

首先创建所有窗格。

使用发送键将命令写入指定的窗格,然后使用Cm执行命令。例如:

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
Run Code Online (Sandbox Code Playgroud)

本书有一章很好地介绍了如何使用Tmux设置环境。