Мне приходится использовать систему, которая требует входа через некоторые виртуализации Citrix/Windows, чтобы в конечном итоге получить доступ к системе RedHat EL 6, в которой я сталкиваюсь с действительно странным поведением, которое администраторы не смогли исправить.
В принципе, vi
и vim
оба, кажется, работают нормально, если я не использую ни один из них внутри экрана. Когда я нахожусь внутри экрана, возникают серьезные проблемы с перерисовкой, которые возникают во время вставок, если я выхожу за пределы первоначального отображаемого содержимого (например, перемещаюсь в конец или середину файла, который длиннее, чем может отобразить экран, или прокручиваю вниз на одну или две строки). Когда это происходит, -- INSERT --, который рисуется внизу экрана терминала, сдвигает все вверх на одну строку. Если ваши правки незначительны (например, не перемещаются и не вносят много изменений в разные строки), обычно все в порядке, но все перерисовывается неправильно (иногда дополнительная обратная связь от самого vi прокручивает предыдущую строку на одну вверх, так что в итоге у вас остаются две -- INSERT -- строки или другой текст). Но если вы перемещаетесь после вставки, особенно если вы заставляете содержимое окна прокручиваться или полностью прорисовываться, это полный беспорядок. Перемещение курсора в конец строки или что-то еще не следует тому, что показано на экране.
Чтобы сделать ситуацию еще более раздражающей, к этой странной системе можно получить доступ двумя способами: 1 через терминальную сессию (через виртуализированный браузер IE) и 1 через рабочий стол VNC (через ту же виртуализацию). К сожалению, рабочий стол VNC совершенно непригоден для командной строки из-за проблем с обновлением и застрявших символов (случайные символы повторяются сотни раз). Но, несмотря на эти проблемы, vi работает внутри экранов.
Я выгрузил переменные из обоих типов сеансов vi в файлы, и они различаются, но я недостаточно хорошо знаю vi, чтобы понять, какие переменные могут быть виновниками.
Кстати, оба используют один и тот же двоичный файл VIM 7.2.411 (проблема сохраняется с /bin/vi) и screen 4.00.03. Оба находятся на одной машине.
Когда я отправил запрос в службу поддержки, администраторы установили более новую версию VIM, что на самом деле сделало проблему гораздо менее серьезной, но ее по-прежнему невозможно использовать для редактирования файлов, за исключением внесения очень незначительных изменений.
решение1
Проблема может заключаться в том, что ваш экран настроен на использование последней строки окна терминала в качестве строки жесткого статуса, и вы открываете окно в screenrcдонастройка строки hardstatus. Содержит ли ваша конфигурация экрана что-то подобное?
screen 1
# ...
hardstatus alwayslastline "..."
В этом случае окно, открытое командой screen в screenrc, не имеет правильно настроенного количества строк — оно не учитывает строку, используемую строкой hardstatus. Однако другие окна должны быть в порядке (сравните вывод stty size
в начальном окне, открытом screenrc, и других окнах).
Я открыл сообщение об ошибке по этой проблемездесь. Хотя в ретроспективе имеет смысл, что команда screen, предшествующая конфигурации hardstatus, может иметь такой эффект, это довольно неожиданно с точки зрения пользователя (многие файлы конфигурации не имеют понятия о последовательности). Также, как ни странно, если вы сделаете что-то вроде:
screen 1
screen 2
screen 3
# ...
hardstatus alwayslastline "..."
Неправильно настроено только окно 3.