Как отключить режим "vi compatible" для Vim в Cygwin в Windows 8?
Я использую Cygwin 1.7.22 (32-разрядный) в Windows 8 (64-разрядный). В Cygwin я использую Vim 7.3.1152, который является версией по умолчанию.
Поведение, похожее на ошибки:
-
Когда я нажимаю I для входа в режим вставки, он не говорит -- INSERT --
в левом нижнем углу. На самом деле, он ничего не говорит. Однако он ведет себя правильно.
-
Когда я удаляю буквы с помощью Backspace в режиме вставки, буквы не исчезают, а курсор перемещается влево.
-
Когда я использую клавиши со стрелками в режиме вставки, он вводит буквы A, B, C и D, а не перемещает курсор. Клавиши со стрелками работают нормально вне режима вставки.
Как заставить Vim вести себя так, как я ожидаю?
Ответы
Ответ 1
Создайте файл ~/.vimrc
со следующим содержимым, чтобы поместить vim в несовместимый режим (на самом деле достаточно наличия файла достаточно.)
set nocompatible
Поведение, которое вы видите, это поведение vi
. Это не ошибки.
Взгляните на :h nocompatible
В режиме, совместимом с vim, стараются максимально эмулировать vi.
-
--insert--
не является частью vi, поэтому он не отображается в совместимом режиме.
- Я считаю, что vi сделал ленивую перерисовку экрана и не обновлялся, пока вы не вернулись в обычный режим. Также backspace используется только для работы, но работает только на том, что было введено в текущем режиме вставки. В целом, это не очень удобно.
- Клавиши со стрелками отправляются в vim в качестве escape-последовательностей (побег сопровождается соединенными буквами). Пусть
^[
. ^[OA
на моем компьютере, вероятно, что-то похожее на ваш. vim видит это как побег (возвращается в нормальный режим), а O (добавляет строку выше текущего) и A, который является A, который вы видите, введенным на ваш экран. Это просто означает, что vim в совместимом режиме не правильно интерпретирует escape-символы. Скорее всего потому, что vi не интерпретировал их (и не был предназначен для их использования).
set nocompatible
устраняет проблемы 1 и 3.
Я думаю, что set backspace=indent,eol,start
должен исправить проблему 2.
Ответ 2
Это задавали несколько месяцев назад, но я отвечаю за будущую ссылку для всех, кто сталкивается с этой проблемой.
Я был просто укушен этой проблемой. Все советы, перечисленные в этом сообщении, а также в других сообщениях на этом форуме (не говоря уже о сообщениях на других форумах) не работают, по крайней мере для некоторых из нас. Наконец я понял реальную проблему.
vim на cygwin, по какой-либо причине (по крайней мере, это было для меня) не использует .vimrc, который вы помещаете в свой каталог. Скажем, вы скопируете пример один в свой рабочий каталог или скопируете какой-либо .vimrc из онлайн. Или, может быть, вы создаете новый с нуля, и поместите все настройки, которые хорошие люди здесь и в других местах рекомендуют (установите backspace = blahblah, установите nocompatible, установите это, установите это). Это не работает. Зачем? Потому что по какой-либо причине (по крайней мере, в моем случае) vim не смотрит на .vimrc, который вы только что создали.
Решением является FORCE vim для использования конкретного .vimrc, передавая -u в командной строке следующим образом:
vim -u [/INSERT/PATH/TO/.vimrc]
Для любви ко всему, что свято, НЕ НАЙТИ квадратные скобки или слова "/INSERT/PATH/TO/.vimrc" дословно. Используйте свой мозг, пожалуйста.
В любом случае, это решило мои проблемы, и я смог использовать пример по умолчанию .vimrc и получить правильное поведение при удалении и возврате в режиме вставки, не говоря уже о других положительных героях.
Вам может понадобиться псевдоним команды vim в вашем .bashrc, например:
alias vim='vim -u [/INSERT/PATH/TO/.vimrc]'
Ответ 3
Относительно A, B, C, D для клавиш со стрелками в Vim, добавив:
:set term=cons25
to ~/.vimrc
работал как шарм.
источник: http://vim.wikia.com/wiki/Fix_arrow_keys_that_display_A_B_C_D_on_remote_shell