在我的 shell 中,我使用 禁用了流量控制stty -ixon
。这在 shell 中以及当我tmux
在
tmux
.
但是,当从命令行启动新会话并直接启动命令时,不会遵守流量控制设置并 ctrl-s冻结终端。
这有效:
tmux new-session -s foo
vim
这不尊重stty
流量控制设置:
tmux new-session -s foo vim
即使在后一种情况下,如何禁用流量控制?
答案1
如果您stty -ixon
的 shell 已初始化,则相当简单:tmux
创建新终端时,它默认运行用户的默认 shell,然后在初始化期间禁用控制流。但是,当您要求 tmux 运行特定命令(在您的情况下为 ViM)时,不会发生初始化并且应用默认终端设置(启用流控制)。
tmux new-session -s foo "stty -ixon; vim"
应该可以解决你的问题。
答案2
不需要更改调用的解决方法tmux
是将调用包含stty
在文件中$HOME/.zshenv
。该文件由 ZSH 解析,甚至可用于非交互式 shell。
echo 'stty -ixon' | tee -a ~/.zshenv
# ... or ...
echo 'stty -ixon' >> ~/.zshenv
BASH 用户必须设置环境变量BASH_ENV=$HOME/.zshenv
才能使其工作。