Когда я запускаю vim под экраном GNU, я обнаружил, что комбинации клавиш CTRLсо стрелками и Pg * не работают должным образом.
Я использую vim-gnome
пакет Ubuntu 10.10 .
На другой машине, также работающей под управлением Ubuntu, это работало без проблем; к сожалению, сейчас у меня нет этой конфигурации.
Здесь есть связанный вопрос: Как исправить стрелки Ctrl + в Vim?
Однако предлагаемое решение заключается в переназначении сочетаний клавиш vim для работы с эмулятором терминала, в данном случае PuTTY. Я не припоминаю, чтобы что-то подобное делало, и подозреваю, что есть опция конфигурации экрана, которая решит эту проблему.
В списке рассылки gnu-screen также есть ветка, в которой говорится, что запуск vim via $ TERM=xterm vim
- это подходящее исправление или обходной путь. Это работает, но я немного обеспокоен тем, что могут быть побочные эффекты. Это также не звучит достаточно знакомо, чтобы быть решением, которое я настроил на другом компьютере (если решение было необходимо).
источник
term xterm
в мой~/.screenrc
файл исправило это для меня. Еще раз спасибо!Ответы:
Как интуитивно сказано в его обновлении, добавление
term xterm
в~/.screenrc
файл, похоже, решает эту проблему.источник
screen
бы просто не распространять$TERM
переменную среды, а не переопределять ее"screen"
. Предположительно есть некоторые обстоятельства, где это важно иметь$TERM == screen
.TERM=screen
заключается в том, что приложения, работающие внутри, обмениваются данными внутри терминала Screen: управляющие последовательности, которые они отправляют и получают, являются теми, что у Screen, а не теми терминалами, которые отображаются на самом терминале. Поскольку вы можете отсоединить сеанс Screen и подключить его к терминалу другого типа, этот уровень косвенности необходим.xterm
?infocmp screen
иinfocmp xterm
, и управляющие последовательности экрана с Xterm управляющими последовательностями . У меня нет срыва, чтобы предложить; большинство приложений не будут возражать, но некоторые могут вести себя раздражающе.Есть несколько других способов установить терминал, который работает в запущенных процессах:
В экземпляре рабочего экрана нажатие
^A
-:
и ввод командыterm xterm
приведут к тому, что вновь открытые экраны в этом экземпляре начнут работать с$TERM
переменной среды, установленной вxterm
; это в свою очередь будет распространяться на вызываемыеvim
экземпляры. Эти экземпляры vim будут отображать правильное поведение в отношении комбинаций CTRL; Я еще не обнаружил никаких побочных эффектов этой стратегии. Эта команда не влияет на существующие экраны. Эту команду, конечно, можно использовать в~/.screenrc
файле, поэтому возможно, что этот метод использовался на другом компьютере.В работающем экземпляре vim команда
set term=xterm
заставит сочетания CTRL работать в этом экземпляре vim. У этого есть побочный эффект отключения X буфера обмена (то есть@*
и@+
) по причинам, которые я еще не понимаю. Интересно, что побочный эффект буфера обмена также возникает, когда команда:set term=screen
выполняется в экземпляре vim, с которого начинается$TERM=xterm
.источник
Основная проблема заключается в том, что отображение, выполненное
screen
между фактическим терминалом (идентифицированнымTERM
переменной окружения снаружиscreen
) и эмуляцией внутри,screen
является неполным.Если вам случится проверить его (используя vttest или tack ), вы можете заметить недостатки для
Попытка решить эти проблемы путем установки
term
в.screenrc
имеет недостаток , заключающийся в том , что он работает только для данного фактического терминала, и не подходит для других терминалов реализации. В документации примечанияСуществует другое решение (с другим недостатком), использующее эту функцию из
screen
документации :ncurses предоставляет несколько полезных альтернативных описаний терминалов для этого случая, например, screen.xterm-new , для устранения проблем в отображении экрана. На практике я использую
TERM=xterm-new
, а при запуске экрана получаю удобное отображение функциональных клавиш.Возвращаясь к
term
настройкам экрана , при тестировании вы можете заметить, что с отображением все еще остаются проблемы, которые решаются в этих альтернативах. Если бы можно было получить точное описание терминала, используяterm
эти альтернативы, были бы простые псевдонимыscreen
. Они не.ncurses не предоставляет
screen.xterm
(sic), потому что:TERM=xterm
широко используется для эмуляторов терминала, которые отличаются от xterm; добавление этого отображения только усугубит эту ситуацию (см., например, почему бы просто не использовать TERM со значением "xterm"? в FAQ по ncurses)screen.xterm
меньшей вероятностью будет установлено в удаленных системах (см. комментарий об изменении с июня 2015 г. в базе данных терминала).В целом, однако, использование альтернативных имен лучше, чем использование
term
в вашем.screenrc
: оно решает больше проблем, чем создает. Обратное верно дляterm
настройки.источник