Поиск по сайту:

Объяснение режимов редактора Vim


На этой странице

  1. Системный и локальный vimrc
  2. О какой совместимости идет речь
  3. Как включить/отключить эти режимы?
  4. Другая полезная информация

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

But before we do that, please note that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 14.04, and the Vim version we've used is 7.4.

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

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

Рассматриваемый аспект заключается в следующем: когда Vim запускается, редактор ищет системный файл vimrc для выполнения общесистемных инициализаций по умолчанию.

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

...
...
...
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $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.

о какой совместимости идет речь

Как и при обсуждении режимов, совместимых и несовместимых с Vims, стоит знать, какую совместимость эти режимы включают и отключают. Для этого сначала следует знать, что Vim — это сокращенная форма Vi IMproved, и, как следует из полного названия, редактор представляет собой улучшенную версию редактора Vi.

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

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

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

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

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

'compatible' 'cp' boolean (default on, off when a |vimrc| or |gvimrc|
file is found)

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

Effectively, this means that when a |vimrc| or |gvimrc| file exists, Vim will use the Vim defaults,otherwise it will use the Vi defaults. (Note: This doesn't happen for the system-wide vimrc or gvimrc file, nor for a file given with the |-u| argument).

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

When Vim starts, the 'compatible' option is on. This will be used when Vim starts its initializations. But as soon as a user vimrc file is found, or a vimrc file in the current directory, or the "VIMINIT" environment variable is set, it will be set to 'nocompatible'.

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

:set nocompatible

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

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

But there is a side effect of setting or resetting 'compatible' at the moment a .vimrc file is found: Mappings are interpreted the moment they are encountered. This makes a difference when using things like "<CR>". If the mappings depend on a certain value of 'compatible', set or reset it before
giving the mapping.

The above behavior can be overridden in these ways:
- If the "-N" command line argument is given, 'nocompatible' will be used, even when no vimrc file exists.
- If the "-C" command line argument is given, 'compatible' will be used, even when a vimrc file exists.
- If the "-u {vimrc}" argument is used, 'compatible' will be used.
- When the name of the executable ends in "ex", then this works like the "-C" argument was given: 'compatible' will be used, even when a vimrc file exists. This has been done to make Vim behave like "ex", when it is started as "ex".

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