Ant*_*ard 2 python linux shell virtualenv tmux
我最喜欢的python开发环境是:
每个泛应该运行一个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)
我尝试了更多奇特的事情,但是我陷入了困境。
首先创建所有窗格。
使用发送键将命令写入指定的窗格,然后使用Cm执行命令。例如:
tmux send-keys -t development:0.1 "workon some_env" C-m
如果你有三个窗格,然后第二个和第三个是SESSION_NAME:0.1
和SESSION_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设置环境。