Vim режимы · 4 min read · Jan 21, 2026

Совместимые и несовместимые режимы в Vim

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

Но прежде чем мы это сделаем, пожалуйста, обратите внимание, что все примеры, команды и инструкции, упомянутые в этом уроке, были протестированы на Ubuntu 14.04, и версия Vim, которую мы использовали, - 7.4.

Чтобы правильно понять вышеупомянутые режимы Vim, вам сначала нужно понять важный аспект процесса инициализации редактора.

Системный и локальный vimrc

Обсуждаемый аспект заключается в том, что когда Vim запускается, редактор ищет системный файл ‘vimrc’, чтобы выполнить системные настройки по умолчанию.

Этот файл обычно находится по пути $VIM/vimrc на вашей системе, но если это не так, вы можете найти точное местоположение, выполнив команду :version внутри Vim. Например, в моем случае вот соответствующий фрагмент вывода, который произвела команда:

...
...
...
системный файл vimrc: "$VIM/vimrc"  
файл пользовательского vimrc: "$HOME/.vimrc"  
2-й файл пользовательского vimrc: "~/.vim/vimrc"  
файл пользовательского exrc: "$HOME/.exrc"  
резервное значение для $VIM: "/usr/share/vim"  
...
...
...

Таким образом, системный файл ‘vimrc’ действительно находится по пути $VIM/vimrc , но я проверил, что переменная окружения $VIM не установлена на моем компьютере. Так что в этом случае - как вы можете видеть в выводе выше - есть резервное значение для $VIM, которое в моем случае равно */usr/share/vim*. Когда я попытался найти ‘vimrc’ по этому пути, я заметил, что файл присутствует. Так что это мой системный vimrc, который - как я уже упоминал ранее - читается при запуске Vim.

После того как этот системный vimrc будет разобран, редактор ищет файл ‘vimrc’, специфичный для пользователя (или локальный). Порядок поиска локального vimrc таков: переменная окружения VIMINIT, $HOME/.vimrc, переменная окружения EXINIT и файл с именем ‘exrc’. Обычно это $HOME/.vimrc или ~/.vimrc, который существует и рассматривается как локальный vimrc.

О какой совместимости мы говорим

Поскольку мы обсуждаем совместимые и несовместимые режимы Vim, стоит знать, какую совместимость эти режимы включают и отключают. Для этого сначала следует знать, что Vim является сокращением от V i IM proved, и, как подразумевает полное название, редактор является улучшенной версией редактора Vi.

Под улучшенной версией подразумевается, что набор функций, который предлагает Vim, больше, чем у Vi. Для лучшего понимания различий между двумя редакторами, перейдите сюда.

Таким образом, обсуждая совместимые и несовместимые режимы Vim, мы говорим о совместимости Vim с Vi. Когда Vim запускается в совместимом режиме, большинство улучшений и дополнений Vim отключаются. Однако имейте в виду, что в этом режиме Vim не просто эмулирует Vi - режим в основном устанавливает некоторые параметры по умолчанию в соответствии с тем, как работает редактор Vi.

Несовместимый режим - что и говорить - заставляет Vim работать без совместимости с Vi, предоставляя пользователю все его улучшения/дополнения/функции.

Как включить/выключить эти режимы?

Попробуйте выполнить команду :help compatible в Vim, и вы должны увидеть следующую синтаксис:

'compatible' 'cp' boolean (по умолчанию включен, выключен, когда найден файл |vimrc| или |gvimrc|)

Таким образом, в описании говорится, что совместимый режим включен по умолчанию, но отключается, когда найден файл vimrc. Но о каком vimrc мы говорим? Ответ - локальный vimrc. Углубитесь в детали, которые предлагает команда :help compatible, и вы найдете следующую строку, которая должна прояснить ситуацию:

Фактически это означает, что когда существует файл |vimrc| или |gvimrc|, Vim будет использовать настройки по умолчанию Vim, в противном случае он будет использовать настройки по умолчанию Vi. (*Примечание: Это не происходит для системного файла vimrc или gvimrc, а также для файла, указанного с аргументом |-u|*)

Таким образом, на самом деле происходит следующее: каждый раз, когда Vim запускается, он сначала разбирает системный файл vimrc - в это время совместимый режим включен по умолчанию. Теперь, когда найден файл vimrc пользователя (или локальный), несовместимый режим включается. Команда :help compatible-default делает это довольно ясным:

Когда Vim запускается, параметр 'compatible' включен. Это будет использоваться, когда Vim начинает свои инициализации. Но как только найден файл vimrc пользователя, или файл vimrc в текущем каталоге, или установлена переменная окружения "VIMINIT", он будет установлен в 'nocompatible'.

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

:set nocompatible

Другие полезные детали

Вот еще несколько полезных деталей об этих режимах:

Но есть побочный эффект установки или сброса 'compatible' в момент, когда найден файл .vimrc: Привязки интерпретируются в момент их появления. Это имеет значение при использовании таких вещей, как "". Если привязки зависят от определенного значения 'compatible', установите или сбросьте его перед тем, как дать привязку.

Вышеупомянутое поведение можно переопределить следующими способами:  
- Если аргумент командной строки "-N" указан, будет использоваться 'nocompatible', даже если файл vimrc не существует.  
- Если аргумент командной строки "-C" указан, будет использоваться 'compatible', даже если файл vimrc существует.  
- Если используется аргумент "-u {vimrc}", будет использоваться 'compatible'.  
- Когда имя исполняемого файла заканчивается на "ex", это работает так, как будто был указан аргумент "-C": будет использоваться 'compatible', даже если файл vimrc существует. Это сделано для того, чтобы Vim вел себя как "ex", когда он запускается как "ex".

Согласен, шансы на то, что вы окажетесь в ситуации, когда вам придется включить режим совместимости Vi в Vim, невелики, но это не значит, что вы должны игнорировать процесс инициализации редактора. В конце концов, вы никогда не знаете, когда эти знания могут вам пригодиться.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.