web-dev-qa-db-ja.com

端末に新しい行が表示されないのはなぜですか?

たとえば、次のコマンドを入力すると、

echo line | (cat >/dev/null; vi)

別のシェルに包まれても

sh -c 'echo line | (cat >/dev/null; vi)'

vimから返されると、キャリッジリターンは表示されなくなります。

新しい行を再度表示するにはどうすればよいですか? (出口なし。)

15
Xiè Jìléi

次のいずれかまたは両方を試してください。

  • ctrl+cと入力してからresetと入力し、enterを押します。
  • ctrl+cと入力してからstty saneと入力し、enterを押します。

ctrl+cは、コマンドラインに入力した他の文字をクリアするためのものです。

resetまたはstty saneは通常、台無しになった端末を修正します。詳細については、resetおよびsttyのマニュアルページを参照してください。

端末がめちゃくちゃになっていると、ctrl+centerでさえ期待どおりに動作しない可能性があることに注意してください。文字を入力する方法は他にもありますが、古代のダークマジックが関係しています。その場合、通常はターミナルを閉じて別のターミナルを起動する方が簡単です。

ターミナルの内部動作についての私の理解は、それがなぜまたはどのように行われるかを説明するほど深くはありません。

31
lesmana

viがstdinから入力を取得することは意図されていません。

とにかく、あなたは再び改行を得ることができます

stty sane

端末をリセットせずに。

3
enzotib