为什么终端不显示新行?

Xiè*_*léi 24 command-line tty

例如,当我输入以下命令时,

echo line | (cat >/dev/null; vi)
Run Code Online (Sandbox Code Playgroud)

甚至包裹在另一个壳里,

sh -c 'echo line | (cat >/dev/null; vi)'
Run Code Online (Sandbox Code Playgroud)

并从 Vim 返回,现在它不会再显示回车了。

我该怎么做才能让它再次显示新行?(没有退出。)

les*_*ana 44

尝试以下一项或两项:

  • 键入ctrl+c,然后键入reset,然后按enter。
  • 键入ctrl+c,然后键入stty sane,然后按enter。

这ctrl+c是清除您可能在命令行中键入的任何其他字符。

reset或者stty sane通常修复一个混乱的终端。阅读的手册页reset和stty获取更多信息。

请注意,如果终端足够混乱,那么它可能无法正常工作ctrl+c或无法enter按预期工作。还有其他输入字符的方法,但它们涉及古老的黑暗魔法。在这种情况下,关闭终端并启动另一个终端通常更容易。

我对终端内部工作原理的理解不够深入,无法解释它为什么或如何做到这一点。


enz*_*tib 6

它不是vi从 stdin 获取输入的预期用途。

无论如何,你可以再次获得换行符

stty sane
Run Code Online (Sandbox Code Playgroud)

无需重置终端。