28

For example, when I type following command,

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

even wrapped in another shell,

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

and returned from Vim, now it won't display carriage return any more.

How can I do to make it again display the new lines? (Without exit.)

1
  • obligatory switch-to-emacs remark :)
    – Dang Khoa
    Aug 21, 2011 at 3:42

2 Answers 2

47

try one or both of these:

  • type ctrl+c, then type reset, then press enter.
  • type ctrl+c, then type stty sane, then press enter.

the ctrl+c is to clear any other characters you might have typed in the command line.

reset or stty sane usually fixes a messed up terminal. Read the man page of reset and stty for more information.

Note that if the terminal is messed up enough then it might be that not even ctrl+c or enter will work as expected. There are still other methods to input characters, but they involve ancient dark magic. In that case, it is usually easier to just close the terminal and start another one.

My understanding of the inner workings of a terminal is not deep enough to explain why or how it does that.

1
10

It is not the intended use for vi to take input from stdin.

Anyway, you can get newlines again with

stty sane

without resetting the terminal.

0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .