Почему в некоторых системах nano неправильно перерисовывает экран?

1041
Sod Almighty

Это странно.

В некоторых моих системах Debian, но не во всех, я получаю странное повреждение в некоторых терминальных программах, таких как nano. Однако этого не происходит при использовании less. В данном конкретном случае я использую 64-разрядную версию Debian 7.9 "Wheezy". Я установил несколько пакетов, но IIRC эта проблема, как известно, случается даже при новой установке.

Проблема заключается в следующем. Я открываю большой текстовый документ (т.е. один с несколькими страницами) в нано и, используя клавиши курсора, пролистываю его. Всякий раз, когда курсор проходит ниже нижней части экрана, документ опускается на половину страницы. Это, конечно, нормально. Что не является нормальным, так это то, что обновляется только нижняя половина экрана!

Аналогично, когда я перемещаю курсор вверх, отображается предыдущая страница, но обновляется только верхняя половина экрана.

Я считаю, что это лучше всего иллюстрировать реальными иллюстрациями. Пожалуйста, рассмотрите следующее изображение фиктивного файла, содержащего только номера строк:

illustration 1

Это должна быть фотография, потому что проблема не возникает по ssh. Это также, как ни странно, не произойдет, если я сначала введу screenкоманду.

Я перемещаю курсор вниз под строкой 43, и происходит следующее:

illustration 2

Обратите внимание, как обновляется нижняя половина экрана, теперь отображаются строки, начинающиеся с 44, а верхняя половина остается неизменной.

Если я снова переместу курсор в нижнюю часть экрана, это произойдет снова:

illustration 3

Еще раз, нижняя половина экрана обновилась, чтобы показать линии, начинающиеся с 66, в то время как верхняя половина экрана остается неизменной.

Если затем я наведу курсор на верхнюю часть экрана, то в верхней половине появится та же проблема:

illustration 4

Как вы можете видеть, верхняя половина экрана обновилась, чтобы показать строки с 23 по 44, в то время как нижняя половина не изменилась, и все еще показывает строки, начинающиеся с 67.

В настоящее время я использую zshоболочку, но точно такая же проблема возникает в bash. Поэтому это не специфическая для оболочки проблема.

Эти $linesи $columnsпеременные пусты; и TERMпеременная установлена ​​в xterm-256color.

Итак .... почему это происходит, и что я могу с этим поделать? Благодарю.

0
Какой размер сообщает `stty size`? Это серийный tty? Вы действительно используете xterm - фотографии больше похожи на консоль Linux? (Это не может быть _possbly_ быть специфичным для оболочки, потому что оболочка не имеет права голоса в этом, она просто интерпретирует команды.) grawity 8 лет назад 0
@ grawity Ну, я никогда не говорил, что использую xterm. Я действительно использую консоль текстового режима Linux. `stty size` сообщает '48 128 '. Sod Almighty 8 лет назад 0
Нет, вы сказали, что у вас есть `TERM = xterm-256color`, что подразумевает xterm или совместимость, а консоль текстового режима Linux является _not_ xterm-совместимой. Требуется `TERM = linux`. grawity 8 лет назад 0
@ Grawity Wow, это исправило, спасибо. Но эээ ... разве мне не нужно `TERM = xterm-256color` или что-то подобное при` ssh`, чтобы я правильно отображал цвета? Как мне убедиться, что это установлено при `ssh`ing? Sod Almighty 8 лет назад 0

1 ответ на вопрос

1
grawity

Итак, проблема в том, что вы TERM=xterm-256colorиспользуете консоль Linux, но не используете xterm-совместимый терминал. (И также не поддерживает 256 цветов.)

Если вы устанавливаете $ TERM из своего ~/.bashrcили аналогичного файла, обязательно проверьте предыдущее значение, прежде чем устанавливать новое. Например:

case $TERM in xterm|screen|tmux|rxvt-unicode) TERM="$TERM-256color";; esac