Чому термінал не відображатиме нові лінії?


16

Наприклад, коли я набираю наступну команду,

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

навіть загорнутий в іншу оболонку,

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

і повернувся з Vim, тепер він більше не відображатиме повернення каретки.

Як я можу зробити так, щоб він знову відображав нові рядки? (Без виходу.)


обов'язкове зауваження "перехід на емакс" :)
Данг Хоа

Відповіді:


36

спробуйте один чи обидва з них:

  • введіть ctrl+c, потім введіть resetта натисніть enter.
  • введіть ctrl+c, потім введіть stty saneта натисніть enter.

ctrl+cполягає в тому, щоб очистити будь-які інші символи, які ви могли б ввести в командному рядку.

resetабо stty saneзазвичай виправляє заплутаний термінал. Прочитайте сторінку людини resetта sttyдля отримання додаткової інформації.

Зауважте, що якщо термінал буде заблокований достатньо, то, можливо, це навіть не працює ctrl+cабо enterбуде працювати, як очікувалося. Є ще інші методи введення символів, але вони передбачають давню темну магію. У такому випадку зазвичай простіше просто закрити термінал і запустити інший.

Моє розуміння внутрішньої роботи терміналу недостатньо глибоке, щоб пояснити, чому або як це робиться.


4

Це не призначене використання для viотримання даних від stdin.

У будь-якому випадку, ви можете отримати нові рядки знову

stty sane

без скидання терміналу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.