SSH искажающие символы в vim / nano на удаленном сервере

18

... и это сводит меня с ума.

По сути (это происходило в последние пару месяцев), я подключаюсь к нескольким серверам CentOS (одному Linode, другому VPS и общему хосту, к которому у меня есть доступ к оболочке), запустив 5.5, 5.7 и 6 с моего Mac работает под управлением OS X Lion, используя Terminal.

В принципе:

$ ssh username@example.com

[remote-host] $ nano somefile.txt

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

Я заканчиваю тем, что получаю такие вещи, как «Это неофициальный текст». Когда я набрал (в безумном редакторе курсора) «Это строка текста».

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

Я обнаружил проблемы с рендерингом Linode Lish Shell Vim и Nano: линии не отображаются / позиции курсора неправильные , но я не знаю, насколько это связано, так как это конкретно относится к lish.

geerlingguy
источник
1
Эй, @geerlingguy, я отправил ответ на этот вопрос несколько лет назад, когда твое имя ничего не значило для меня, но теперь я регулярно использую твою работу. Спасибо за все ваши вклады!
Дбентон
1
@dbenton - я помогаю вам, вы помогаете мне, мы счастливое сообщество :)
geerlingguy

Ответы:

14

[ Обновление: Начиная с Mac OS X Mountain Lion 10.8, Терминал поддерживает escape-последовательность Backtab, устраняя эту проблему.]

Версия (s?) Nano на этих серверах иногда отправляет последовательность Backtab (ESC [Z) при перемещении курсора влево на один символ, но Терминал не поддерживает эту последовательность, поэтому nano считает, что курсор переместился, когда нет t и его представление о текущей позиции курсора не синхронизировано с терминалом.

По причинам, которые я не могу понять, nano отправляет Backtab при перемещении влево, а курсор находится на один символ справа от табуляции. Точно так же IIRC отправляет Tab (Control-I) при перемещении вправо, а курсор находится на один символ слева от остановки табуляции. Я не знаю, почему он делает это вокруг табуляции вместо того, чтобы всегда двигаться влево / вправо, используя одинаковые последовательности символов. Версия nano, поставляемая с Mac OS X Lion 10.7, этого не делает.

Nano делает это только тогда, когда terminfo говорит, что cbtвозможность поддерживается. Termfo по умолчанию для терминала - это xterm-256color, который объявляет эту возможность и сопоставляет ее с последовательностью Backtab. Обходной путь - установить TERMпеременную среды на то, что не объявляет эту возможность. Вы можете сделать это на локальном компьютере перед вызовом sshили в файле запуска оболочки на удаленном хосте. Установка его xterm-colorв крайнем случае будет делать, хотя это не рекомендуется, так как это отключает другие важные действия (например, 256 цветов, BCE, альтернативное сохранение содержимого экрана). (Более тяжелый подход заключается в настройке вашего xterm-256color(или xterm) файла terminfo на удаленном хосте для удаления cbt.)

Рекомендуется настроить удаленный хост (так или иначе), чтобы настройки не применялись локально или к другим удаленным хостам, но самый простой обходной путь - изменить настройку предпочтения терминала, чтобы использовать xterm-colorвместо xterm-256color:

Терминал> Настройки> Настройки> [профиль]> Дополнительно> Объявить терминал как:

Я рекомендую продублировать существующий профиль настроек, настроить его и использовать только при подключении к этим удаленным хостам.

Крис Пейдж
источник
Настройка цвета xterm определенно работает - не могли бы вы рассказать, как настроить мой файл terminfo на удаленном хосте? Ссылка подойдет, но я, вероятно, буду время от времени возвращаться к этому сообщению, чтобы запомнить этот совет :)
geerlingguy
1
@geerlingguy Изменение существующего определения terminfo . Удалить cbt=\E[Zзапись в .tiисходном файле.
TachyonVortex
Это помогло мне, я установил параметр с xterm-256color на xterm, и теперь я могу выбирать, копировать и т. Д., Как раньше. (Я не знаю, как или кто изменил эту опцию). Благодарность!
Spacebiker
8

У меня была такая же проблема. Я нашел этот поток, который рекомендовал, среди других решений, переменную среды на удаленном сервере:

export TERM=xterm-color

Добавление этого в ~ / .bash_profile решило проблему для меня. Это простое решение, преимущество которого заключается в том, что он влияет только на конкретного пользователя на конкретном хосте.

dbenton
источник
2

У меня была такая же проблема в программе MobaXTerm. Причиной проблемы был ключ -K, который я использовал для включения numpad в Nano при использовании PuTTY. Как я выяснил в MobaXTerm -K не нужен (по умолчанию работает numpad) и без него клавиши со стрелками работают правильно и не вставляют мусор случайным образом.

Tooluka
источник
1

OSX 10.7.4 с Centos в качестве гостевой ОС

В настройках терминала OSX, настройки, расширенные

Declare terminal as:xterm-color
Strict VT-100 keypad behaviour - TICKED!

Больше никаких проблем :)

Джаррод
источник
Обратите внимание, что предпочтение «поведение клавиатуры VT-100» совершенно не связано с этими вопросами и ответами и не влияет на результат.
Крис Пейдж
1

Для пользователей MobaXterm. Если вы не используете -K и все еще испытываете проблему. Убедитесь, что следующие строки закомментированы в вашем файле / etc / nanorc.

# set rebinddelete

# set rebindkeypad

в открытом виде
источник
0

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

export TERM=xterm-color
boulder_ruby
источник
-1

Если вы получаете «Это неофициальный текст» и то, что вы ввели «Это текстовая строка» (я должен предположить, что ваш отчет верен), то у вас есть нестабильный «управляющий» ключ, какой бы он ни был на Mac (команда ? яблоко?). Поскольку nano использует клавиши control +, чтобы «прыгать», и у вас меньше символов, чем набрано, у нас есть а) исчезающие символы б) последовательности элементов управления, появляющиеся из ничего, из чего следует, что а) становится б) логичным.

У вас также может быть какая-то неприятная программа для работы с горячими клавишами, макросами или чем-то еще. Я подозреваю, что это принадлежит суперпользователю, а не серверной ошибке, но я буду держать пометку, возможно, у кого-то есть реалистичный, связанный с SSH ответ.

СНХ
источник
Это происходит, когда я использую клавиши со стрелками для перемещения вперед и назад по строке, чаще, чем когда я просто печатаю. Но это кажется довольно случайным. Я собираюсь быстро попробовать предложение Криса, чтобы увидеть, работает ли оно, но спасибо за ответ!
geerlingguy