tmux 不尊重禁用的控制流

Mar*_*rco 8 terminal keyboard tmux

在我的 shell 中,我使用stty -ixon. 这在 shell 中完美运行,当我tmuxtmux.

但是,从命令行启动新会话并直接启动命令时,不遵守流量控制设置并 ctrl-s冻结终端。

这有效:

tmux new-session -s foo
vim
Run Code Online (Sandbox Code Playgroud)

这不尊重stty流量控制设置:

tmux new-session -s foo vim
Run Code Online (Sandbox Code Playgroud)

即使在后一种情况下,如何禁用流量控制?

pet*_*rph 6

如果您stty -ixon在 shell 的初始化中进行了操作,则相当简单:当tmux创建新终端时,它默认运行用户的默认 shell,从而在初始化期间禁用控制流。但是,当您要求 tmux 运行特定命令(在您的情况下为 ViM)时,不会进行初始化,并且会应用默认的终端设置(启用流量控制)。

tmux new-session -s foo "stty -ixon; vim"
Run Code Online (Sandbox Code Playgroud)

应该可以解决您的问题。


Mar*_*rco 6

不需要更改tmux调用的解决方法是将stty调用包含在文件中$HOME/.zshenv。该文件由 ZSH 解析,甚至用于非交互式 shell。

echo 'stty -ixon' | tee -a ~/.zshenv
# ... or ...
echo 'stty -ixon' >> ~/.zshenv
Run Code Online (Sandbox Code Playgroud)

BASH 用户必须设置环境变量BASH_ENV=$HOME/.zshenv才能使其工作。

  • 我不知道它做了什么,但它确实做到了。将它添加到`.zshrc` 和`.zshenv`。不过要小心`>`。使用:`echo 'stty -ixon' >> ~/.zshenv` (2认同)