Назад | Перейти на главную страницу

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

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

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

В принципе:

$ ssh username@example.com

[remote-host] $ nano somefile.txt

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

В итоге я получаю что-то вроде «Это новый текст». Когда я набрал (в редакторе с безумным курсором) «Это строка текста».

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

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

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

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

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

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

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

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

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

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

export TERM=xterm-color

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

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

OSX 10.7.4 с Centos, работающей в качестве гостевой ОС

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

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

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

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

# set rebinddelete

# установить rebindkeypad

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

export TERM=xterm-color

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

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