Подтвердить что ты не робот

Как отключить режим "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 вести себя так, как я ожидаю?

4b9b3361

Ответ 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]'