46

Я использую приглашение Cygwin bash, и для длинных команд текст будет перенесен на одну и ту же строку, а не на переход к следующей строке, несмотря на то, что для моей PS1 установлено просто '$'.

Вот скриншот,
Скриншот

7 ответов7

52

Я уже использовал MinTTY, и удаление новой строки в PS1 тоже не помогло. Один совет на этой странице помог. Я выполнил эту команду bash:

kill -WINCH $$

В моем случае, запуск этого однажды исправил проблему, даже после выхода из системы и повторного входа. Я не уверен, что это всегда так.

16

Для меня решение было добавить следующие строки в .bashrc:

PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM

Обратите внимание, что непечатаемые символы в приглашении должны быть заключены в \[ ... \] .

8

У меня была такая же проблема с 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.

4

Как прокомментировали dregad и ak2, установки export TERM=cygwin в моем файле ~/.bashrc было достаточно, чтобы решить эту проблему для меня.

4

@ jtpereyda в ответ , конечно , на марке. Но по какой-то причине я не мог этого допустить и копнул немного глубже.

В продолжение этого комментария, если вы изменяете размер терминала, находясь в vim (или в любом другом полноэкранном приложении, которое отводит tty от оболочки), результирующий SIGWINCH часто не отправляется в оболочку, поэтому, когда он получает обратно контроль над ним не знает, что размер терминала был изменен.

Когда вы изменяете размер своего терминала, он должен вызывать ioctl(..., TIOCSWINSZ, ...) на главном pty, в котором работает vim. Это в свою очередь приводит к killpg(SIGWINCH) в группе процессов vim.

Проблема в том, что vim работает в своей собственной группе процессов, отличной от оболочки, из которой он был выполнен, поэтому оболочка bash не получает SIGWINCH и не корректирует свои строки / столбцы соответствующим образом.

Если вы хотите постоянный обходной путь, добавьте shopt -s checkwinsize в ваш .bashrc . Это заставляет bash проверять размер окна (ioctl(..., TIOCGWINSZ, ..)) после возврата из каждой команды и обновлять ее строки / столбцы.

2

Что-то сломано в настройках вашего терминала (вероятно).
Я полагаю, вы бы уже попытались выйти из этой сессии и перезапустить новую.

Хотя у вас нет решения для терминала Cygwin, попробуйте MinTTY (на самом деле это лучше).

0

Как прокомментировал akatakritos, вы, вероятно, изменили размер своего терминала, когда vim был открыт.

Когда это произойдет, просто измените размер терминала еще раз, и проблема исчезнет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .