2013-12-20 2 views
5

У меня есть cygwin, установленный на моем ящике Windows 7, и я столкнулся с проблемой, когда , когда я набираю команду, она иногда будет обернута обратно на той же строки, удалив подсказку bash. Вот пример:Cygwin обертывает текст обратно в ту же строку, заставляя текст перезаписываться

wrapping example

Команда в вопросе команда «201» (4 линии от дна). Я включил других в контекст.

Текст команды я печатал был

git commit -m "Forced LF line endings."

(Примечание: Я отправляю это в основном с GIT команд, но проблема возникает с любой командой я не заметил шаблон еще. .)

Он прыгнул на начало линии и начал перезаписывать мое приглашение.

Когда я нажимаю стрелку вверх (для просмотра истории) результат еще страннее:

enter image description here

(Обратите внимание, что курсор находится много символов после конца команды.) Когда стараюсь курсора назад с этой позиции, я могу только вернуться далеко:

enter image description here

Тогда, когда я идти в историю с этой backspaced линии, я получаю это:

enter image description here

Команда начинается с конца текста, который отображается. (Это согласовано на протяжении всей истории). Но когда я поднимаюсь в истории до неисправного git commit ..., он отображается, как и раньше, с перезаписанным текстом, но когда я прохожу мимо него, удаляет строку строки и отображает предыдущую запись в истории так же, как и раньше (a la image 2).

Когда я создавал свою переменную PS1, у меня есть нечетный вывод, как это, но с тех пор я закрыл свои скобки и все, и не думаю, что это вызывает проблему. Однако, если вы хотите увидеть мой .bash_profile (который устанавливает PS1), не стесняйтесь видеть его на GitHub. Это действительно коротко.

Я попытался найти проблему и могу найти только несколько электронных архивов cygwin об обертке строк в xterm, но никаких решений.

PS: Как я толкал последнюю .bash_profile для того, чтобы связать его, я снова столкнулся с проблемой, когда я набрал git add .bash_profile и нажать кнопку ввода, он побежал команду, но возвратил курсор в начало того же вместо того, чтобы печатать новое приглашение. Затем, когда я записывал другую строку фиксации, он делал то же самое, что и первое изображение, но зачеркнул остальную часть строки (Он завернул линию, но переписал всю строку, а не только первые несколько символов).

+2

Я думаю, что это происходит из-за того, что вы не кодируете escape-последовательности в своем приглашении должным образом, так что bash смущает объем оставшегося пространства на линии. – Barmar

+0

Не могли бы вы уточнить? Как я могу это исправить? – Vidia

ответ

9

http://manpages.ubuntu.com/manpages/lucid/man1/bash.1.html#contenttoc26 См:

\ [

начало последовательности непечатаемых символов, которые могут быть использованы, чтобы встроить концевую последовательность управления в командной строке

\]

конец последовательность непечатаемых символов

Если вы не заключите непечатаемые символы (например, цветовые последовательности) в вашем приглашении с указанием их длины подсчитывается как часть длины приглашения, что в конечном итоге приводит к симптомам, которые вы описываете.

+0

Я проверю это и вернусь к вам. – Vidia

+1

Я тестировал его на своем новом терминале Mac и, похоже, работал нормально. Я посмотрю, одинаково ли это на других терминалах, но пока вы получите принятый ответ. Кажется, цветовые коды должны начинаться с '\ e [', а затем закрываться с '\]'. Мое выделение синтаксиса vim не соответствовало тем, что было в паре, поэтому я добавил слишком много. – Vidia

+1

Я закончил использовать bash '$ (tput setaf #)' для установки цветов. Кажется, он работает намного лучше, чем брекеты. – Vidia

1

Это не происходит часто для меня. Когда это произойдет, я просто набираю «kill -WINCH $$» в терминал cygwin и исправляет проблему. link to source