我有时使用vim快速编辑文本文件,并且经常错误地输入Emacs的C-x C-s序列来保存它,之后我的vim变得无响应,在状态行中读取
^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)
。 有没有办法让 vim 再次响应,因为它真的很烦人必须杀死终端然后重新开始?
尝试输入 ^Q。
^S 和 ^Q 是 tty 设置中默认的“停止”和“开始”字符。
(vim 应该 操作 tty 设置,这样 control-S 就不会停止输出,但我见过一些系统没有停止输出。是的,这很烦人。)
这是一种古老的 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
我遇到了与 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
有人有想法吗?
谢谢