Я использую приглашение Cygwin bash, и для длинных команд текст будет перенесен на одну и ту же строку, а не на переход к следующей строке, несмотря на то, что для моей PS1 установлено просто '$'.
Вот скриншот,
Я уже использовал MinTTY, и удаление новой строки в PS1 тоже не помогло. Один совет на этой странице помог. Я выполнил эту команду bash:
kill -WINCH $$
В моем случае, запуск этого однажды исправил проблему, даже после выхода из системы и повторного входа. Я не уверен, что это всегда так.
Для меня решение было добавить следующие строки в .bashrc:
PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM
Обратите внимание, что непечатаемые символы в приглашении должны быть заключены в \[
... \]
.
У меня была такая же проблема с MinTTY. Проблема, вероятно, связана с основным приглашением (PS1).
Решением для меня было удаление последнего символа «новой строки» из PS1 (прямо перед знаком «$»):
user@host ~
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$
user@host ~
$ export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '
user@host ~ $
см. http://cygwin.com/ml/cygwin/2001-07/msg00140.html для справки.
Чтобы сделать это изменение постоянным, добавьте экспорт PS1 = '[\e] 0;\w\a]\n [\e [32m]\u @\h [\e [33m]\w [\e [0m]\$ 'в ваш файл ~/.bashrc.
@ jtpereyda в ответ , конечно , на марке. Но по какой-то причине я не мог этого допустить и копнул немного глубже.
В продолжение этого комментария, если вы изменяете размер терминала, находясь в vim (или в любом другом полноэкранном приложении, которое отводит tty от оболочки), результирующий SIGWINCH
часто не отправляется в оболочку, поэтому, когда он получает обратно контроль над ним не знает, что размер терминала был изменен.
Когда вы изменяете размер своего терминала, он должен вызывать ioctl(..., TIOCSWINSZ, ...)
на главном pty, в котором работает vim. Это в свою очередь приводит к killpg(SIGWINCH)
в группе процессов vim.
Проблема в том, что vim работает в своей собственной группе процессов, отличной от оболочки, из которой он был выполнен, поэтому оболочка bash не получает SIGWINCH
и не корректирует свои строки / столбцы соответствующим образом.
Если вы хотите постоянный обходной путь, добавьте shopt -s checkwinsize
в ваш .bashrc
. Это заставляет bash проверять размер окна (ioctl(..., TIOCGWINSZ, ..)
) после возврата из каждой команды и обновлять ее строки / столбцы.
Что-то сломано в настройках вашего терминала (вероятно).
Я полагаю, вы бы уже попытались выйти из этой сессии и перезапустить новую.
Хотя у вас нет решения для терминала Cygwin, попробуйте MinTTY (на самом деле это лучше).
Как прокомментировал akatakritos, вы, вероятно, изменили размер своего терминала, когда vim был открыт.
Когда это произойдет, просто измените размер терминала еще раз, и проблема исчезнет.