Vim 在 C-x C-s 序列后无响应

问题描述 投票:0回答:3

我有时使用vim快速编辑文本文件,并且经常错误地输入Emacs的C-x C-s序列来保存它,之后我的vim变得无响应,在状态行中读取

^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)
。 有没有办法让 vim 再次响应,因为它真的很烦人必须杀死终端然后重新开始?

vim editor
3个回答
56
投票

尝试输入 ^Q

^S^Q 是 tty 设置中默认的“停止”和“开始”字符。

(vim 应该 操作 tty 设置,这样 control-S 就不会停止输出,但我见过一些系统没有停止输出。是的,这很烦人。)


10
投票

这是一种古老的 Unixism,它允许您使用

^S
停止程序的输出,并使用
^Q
重新启动它,从很久以前,当屏幕更新得足够慢时,这样的事情就会很有用。将其视为
less
more
的极其古老的版本。

您可以输入

^Q
再次启动程序输出,或者通过将其添加到您的
~/.bashrc
来关闭这个现在几乎无用的机制:

# Are we on a terminal?
if [ -t 0 ];
then
    stty sane
    stty stop ''
    stty start ''
    stty werase ''
fi

0
投票

我遇到了与 TO 类似的情况,只是没有更多输出。没有任何反应能力。 CTRL-Q 也无法解决它。

跟踪这个 vim 实例只会显示:

strace -p <vim-PID>
clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=10000000}, NULL) = 0
ioctl(0, TCGETS, {c_iflag=ICRNL|IXON|IXOFF|IUTF8, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ISIG|ECHOE|ECHOK|IEXTEN|ECHOCTL|ECHOKE, ...}) = 0
ioctl(0, TCSETS, {c_iflag=IXOFF|IUTF8, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST, c_cflag=B38400|CS8|CREAD, c_lflag=ECHOK|ECHOCTL|ECHOKE, ...}) = 0
ioctl(0, TCGETS, {c_iflag=IXOFF|IUTF8, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST, c_cflag=B38400|CS8|CREAD, c_lflag=ECHOK|ECHOCTL|ECHOKE, ...}) = 0
wait4(703012, 0x7ffc3b1270b4, WNOHANG, NULL) = 0

有人有想法吗?

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.