Ответы:
Я уже использовал MinTTY, и удаление новой строки в PS1 тоже не помогло. Один совет на этой странице помог. Я выполнил эту команду bash:
kill -WINCH $$
В моем случае, запуск этого когда-то решал проблему, даже после выхода из системы и повторного входа. Я не уверен, что это всегда так.
-WINCH
этому, это сигнализирует процессу bash, что размер окна терминала был изменен. Так что это должно быть сделано после каждого изменения размера окна терминала, я думаю.
Для меня решение было добавить следующие строки в .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)
к группе процессов on vim.
Проблема в том, что vim работает в своей собственной группе процессов, отличной от оболочки, из которой он был выполнен, поэтому оболочка bash не получает SIGWINCH
и не корректирует свои строки / столбцы соответствующим образом.
Если вы хотите постоянный обходной путь, добавьте shopt -s checkwinsize
к своему .bashrc
. Это заставляет bash проверять размер окна ( ioctl(..., TIOCGWINSZ, ..)
) после возврата из каждой команды и обновлять ее строки / столбцы.
Что-то сломано в настройках вашего терминала (возможно).
Я полагаю, вы бы уже попытались выйти из этой сессии и перезапустить новую.
Хотя у вас нет решения для терминала Cygwin, попробуйте MinTTY (на самом деле это лучше).
Как прокомментировал akatakritos , вы, вероятно, изменили размер своего терминала, когда vim был открыт.
Когда это произойдет, просто измените размер терминала еще раз, и проблема исчезнет.
TERM
переменная среды? Для консоли Cygwin так и должно бытьcygwin
.