tmux不遵守禁用的控制流


8

在我的shell中,我使用禁用了流控制stty -ixon。这在shell中以及当我在其中启动tmux和启动程序时都非常有效 tmux

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

这有效:

tmux new-session -s foo
vim

这不遵守stty流控制设置:

tmux new-session -s foo vim

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


tmux所有情况下全部禁用流控制是否足够?或者您想确定为什么在第一个示例中有效但在第二个示例中无效?
slm

@slm首先,我想修复它。不过,我对tmux为何会如此表现感兴趣。
马可(Marco)

Answers:


5

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

tmux new-session -s foo "stty -ixon; vim"

应该解决您的问题。


5

一种不需要更改tmux呼叫的解决方法是将stty呼叫包括在文件中$HOME/.zshenv。该文件由ZSH解析,甚至用于非交互式外壳。

echo 'stty -ixon' | tee -a ~/.zshenv
# ... or ...
echo 'stty -ixon' >> ~/.zshenv

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


2
我不知道它是做什么的,但是它成功了。将其添加到.zshrc和中.zshenv。但是要小心>。使用:echo 'stty -ixon' >> ~/.zshenv
firedev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.