我遇到了一个奇怪的问题,我将添加一张照片,因为这样可以更好地解释发生的情况
如你看到的。使用git log
并退出后(按 q 或 Q 或 :q 或 ^C),我无法使用更多命令。
经过一番谷歌搜索后,我找到了这个stty sane
命令,它似乎修复了我的终端。但我不能告诉为什么或者如何它能修复 gnome 终端吗?
据我所见,修复之前和之后stty -a
显示相同的输出。
关于如何开始调试有什么想法或建议吗?
我正在使用 GNOME 3.22.2 的 gnome 终端,使用来自 VTE +GNUTLS 的版本 0.46.2
编辑:
感谢您的回答,我再次查看了这两种配置,我可以看到这些差异
chris@Gentoo ~ $ diff stty-bad stty-good
4c4
< werase = ^W; lnext = <undef>; discard = ^O; min = 1; time = 0;
---
> werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
6c6
< -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl
ixon -ixoff
---
> -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl
ixon -ixoff
9c9
< isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -
tostop -echoprt
---
> isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop
-echoprt
这仍然是一个很长的列表需要检查,我会从这些选项中尽可能多地阅读,但这留下了答案......如何确实stty sane
解决了问题并且什么造成它,因为git log
这不是真正的问题。我尝试过git --no-pager log
,一段时间后打印提交,我按 ^C ,同样的情况发生......
编辑2:
好吧,切换每个选项后,根似乎是-echo
变量。但这只剩下一个问题了。为什么执行git log
或^C
更改默认echo
变量。在哪里我能找到根源吗?是吉特吗? less(git log 的分页器)?或者 gnome 终端?甚至是 stty?
答案1
也就是说,git log
没有正确清理...等待单个按键(例如 vi、less)的应用程序会将终端置于抑制回声、消除特殊控制字符等的模式,只是为了使其简单。但如果他们不清理,终端将无法使用。
该stty sane
命令只是将终端模式设置为预定值。如果您的编辑字符不起作用,则可以修复它(除了某些stty sane
将擦除字符设置为@
等的 Unix 平台)。我使用脚本来比较stty
输出,但它并不短......
你的照片至少有一处不同(我明白了-icanon
,这足以干扰行编辑)。作为参考,这是我之后看到的stty sane
:
$ stty -a
speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
为了以防万一,你可能想仔细看看。