При прокрутке истории в окне терминала cygwin искажается строка

Я использую 64-битную версию Cygwin, последнюю (на сегодня) версию для Windows 7; и в окне терминала я работаю либо на локальном компьютере, либо по ssh на другом компьютере (Linux). Теперь, иногда, когда я прокручиваю назад историю команд bash и передаю несколько более длинных команд (особенно в случае команд, выполняемых в конце строки с подсказкой и в следующей строке) - продолжая прокрутку, вы печатаете другие команды в строке приглашения, но сохраняет символы из (одной / нескольких) более старых команд, если новая команда короче, например:

[me@mine /some/where]$ the quick brown fox jumped over the lazy dog. the
quick brown fox jumped over the lazy dog.

[me@mine /some/where]$ another command altogether over the lazy do

[me@mine /some/where]$ yet another command jumped over the lazy do

сейчас, не все символы сохраняются. Кроме того, это не всегда происходит - я не уверен, что именно это вызывает.

Однако, если я просто подключусь по ssh к удаленному хосту, используя, скажем, putty, а не через cygwin - я не получу такого поведения, так что, похоже, это проблема с Cygwin или его bash.

  • Что именно происходит?
  • В чем причина?
  • Могу ли я исправить это / избежать этого / обойти это (кроме запуска clear , я имею в виду)?
0
13.02.2017, 00:53
2 ответа

Обычная проблема с длиной строки в bash - это приглашение ( PS1 ), которое обычно настроено на использование цветов. Если escape-последовательности не заключены в квадратные скобки \ [ и \] , то bash делает неверные предположения о положении курсора. Обычно об этом сообщают, когда редактируют команду, но прокрутка истории на самом деле не отличается.

Если нет локальной настройки PS1 , следующее место, которое нужно посмотреть, - это описание терминала (значение TERM ). Совсем недавно Cygwin использует mintty в качестве окна терминала. Это потомок putty ... Он устанавливает TERM = xterm . Но есть различия между поведением mintty и xterm (так же, как отличается putty ). Например, при выполнении tack сообщается, что bw (обратный перенос) неверен. bash, похоже, не использует это напрямую (хотя некоторые скрипты могут). Его переход вперед ( am ) также отличается от xterm (видно с vttest ), а bash может иметь некоторую зависимость от поведения xterm.

Если вы использовали xterm от Cygwin и сравнили его с mintty от Cygwin, вы могли бы получить лучшее сравнение.

2
28.01.2020, 02:34

Возможные проблемы:

  • Часть конвейера TTY имеет неверное представление о ширине вашего терминала

  • Что-то запутался в Юникоде

  • Вы находитесь на альтернативном экране, и символы не перезаписываются правильно (память, которую я использую для этой идеи, расплывчата, и я могу ошибаться в деталях)

0
28.01.2020, 02:34

Теги

Похожие вопросы