СПРАВОЧНИК ПО VIM - Брам Мооленаар

  1. Настройка опций
  2. Автоматическая настройка опций
  3. Список опций

В Vim имеется набор внутренних переменных и переключателей, которые позволяют достигать самых разных результатов. Такие опции могут быть трёх видов:

булево может быть включено или выключено
число имеет числовое значение
строка имеет строковое значение

1. Настройка опций

:se[t] Показывает значения всех опций, которые отличаются от настройки по умолчанию.
:se[t] all Показывает значение всех опций, кроме терминальных.
:se[t] termcap Показывает все терминальные опции. Обратите внимание, что в графическом интерфейсе коды клавиш не показываются, поскольку они генерируются на внутреннем уровне и не могут быть изменены. Изменение кодов терминала в графическом интерфейсе не приводит ни к каким полезным изменениям.
:se[t] {опция}? Показать значение {опции}.

:se[t] {опция}

Переключатель: включить опцию.

  • Число: показать значение.
  • Строка: показать значение.
:se[t] no{опция} Переключатель: отключить опцию.
:se[t] {опция}! или
:se[t] inv{опция}
Переключатель: Изменить значение на противоположное.
Vi не имеет такой возможности.
:se[t] {опция}& Изменить значение опции на значение по умолчанию. Результат может зависеть от текущего значения опции 'compatible'.
Vi не имеет такой возможности.
:se[t] {опция}&vi Изменить значение опции на значение по умолчанию в Vi.
Vi не имеет такой возможности.
:se[t] {опция}&vim Изменить значение опции на значение по умолчанию в Vim.
Vi не имеет такой возможности.
:se[t] all& Изменить значение всех опций, кроме терминальных, на их значения по умолчанию. Значения опций 'term', 'lines' и 'columns' остаются без изменений.
Vi не имеет такой возможности.
:se[t] {опция}={значение} или
:se[t] {опция}:{значение}
Установить {значение} строковой или числовой опции.
Для числовых опций значение может быть задано в десятичной, шестнадцатеричной (при помощи '0x') или восьмеричной (при помощи '0') форме (шестнадцатеричные и восьмеричные значения доступны только на машинах, на которых имеется функция strtol()).
Текущее значение опции может быть вставлено при помощи кнопки, заданной значением опции 'wildchar' (по умолчанию это <Tab> или CTRL-E, если включена опция 'compatible'). См. |дополнение_командной_строки|.
Допускается использование пробела между {опцией} и символом '=', он игнорируется редактором. Пробел между '=' и {значением} не допускается.
Об использовании символа обратной косой черты и пробелов в {значении} читайте в разделе |опции-обратная_косая|.

:se[t] {опция}+={значение}

Сложение текущего значения числовой опции и указанного {значения}, либо добавление {значения} к строковой опции. Если значением опции является разделённый запятыми список, то запятая добавляется автоматически, если опция уже имеет какое-либо значение отличное от пустой строки.
Если значением опции является список флагов, то лишние флаги удаляются. В остальных случаях проверка повторяющихся значений в списке не производится. Повторения значений в списке можно избежать путём удаления значения перед его добавлением. Пример:

:set guioptions-=T guioptions+=T

См. также |:set-аргументы| выше.
Vi не имеет такой возможности.

:se[t] {опция}^={значение} Умножение указанного {значения} на текущую величину числовой опции или добавление указанного {значения} к текущему значению строковой опции. Если значением опции является список значений, разделённых запятой, то перед добавлением указанного значения будет добавлена запятая, если текущее значение опции не является пустой строкой.
См. также |:set-аргументы|.
Vi не имеет такой возможности.
:se[t] {опция}-={значение} Вычитание указанного {значения} из текущей величины числовой опции или удаление указанного значения из величины строковой опции, если такое значение включено в текущее значение опции. Если указанное {значение} в составе строковой опции не присутствует, то это не приводит к возникновению ошибки или выдаче предупреждения. Если опция представляет собой список значений, разделённых запятыми, то соответствующая запятая также будет удалена, если в этом есть необходимость.
Если опция представляет собой список флагов, то указанное {значение} должно быть задано в точности так, как оно указано в текущем значении опции. Лучше всего удалять флаги по очереди, чтобы не столкнуться с проблемами.
См. также |:set-аргументы|.
Vi не имеет такой возможности.

Команда ":set" позволяет задавать несколько {опций}. Например:

:set ai nosi sw=3 ts=3

При этом, если в одном из аргументов будет допущена ошибка при определении значения опции, то будет выдано соответствующее сообщение и последующие аргументы будут проигнорированы.

Если значение опции 'verbose' не равно нулю, то отображение значения опции также приводит к выводу информации о том, каким образом значение данной опции было последний раз изменено. Например:

:verbose set shiftwidth cindent?
  shiftwidth=4
Последний раз установлено из modeline
  cindent
    Последний раз установлено из /usr/local/share/vim/vim60/ftplugin/c.vim

Эта информация выводится только в том случае, когда выполняется просмотр значения определённой опции, но не для команды ":set all" или ":set" без аргумента.

Если значение опции устанавливается вручную, то сообщение о последнем изменении не выводится. Для всех локальных опций с одним и тем же именем выводится только одно значение, поэтому сообщение относится прежде всего к имени опции, а не к её значению. Если значение опции было изменено во время выполнения функции, пользовательской команды или автокоманды, то выводится путь к сценарию, в котором было определено такое изменение. Обратите внимание, что значение опции может также измениться при включении опции 'compatible' в качестве побочного эффекта.
Доступно только в том случае, если Vim скомпилирован с особенностью |+eval|.

В качестве {опции} может быть также использовано имя в формате "t_xx" для установки опции терминала termcap. В этом случае указанное значение будет переопределять значение, заданное в определении терминала в termcap. После этого соответствующие символы можно использовать в привязках. Если "xx" содержит специальный символ, то следует использовать формат <t_xx>:

:set <t_#4>=^[Ot

Это также может быть полезно для перевода специального кода в обычный символ. Например, если Alt-b приводит к вводу <Esc>b, то следует использовать такую настройку опции:

:set <M-b>=^[b

(здесь ^[ это настоящий символ <Esc>, для его ввода следует пользоваться CTRL-V <Esc>). Преимущество такого метода над привязкой состоит в том, что он работает во всех ситуациях.

Вывод команды ":set" отличается от вывода аналогичной команды в Vi. Длинные строковые опции помещаются в конце списка. Количество опций довольно большое, поэтому вывод команды "set all" скорее всего не поместится на одном экране и Vim выведет сообщение |продолжение_следует|.

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

Вот несколько примеров:

:set tags=tags\ /usr/tags    задаёт значение "tags /usr/tags"
:set tags=tags\\,file        задаёт значение "tags\,file"
:set tags=tags\\\ file       задаёт значение "tags\ file"

Символ "|" отделяет команду ":set" от последующей команды. Чтобы включить символ "|" в значение опции следует использовать "\|". В следующем ниже примере мы устанавливаем значение опции 'titlestring' равным строке "привет|буфет":

:set titlestring=привет\|буфет

А теперь установим значение опции 'titlestring' равным строке "привет", а значение опции 'iconstring' равным строке "буфет":

:set titlestring=привет|set iconstring=буфет

В MS-DOS и WIN32 символы обратной косой черты в именах файлов как правило не убираются, а именно: в тех опциях, значением которых является имя файла (и в которых может происходить подстановка значения переменной окружения), символ обратной косой черты перед обычным символом имени файла не будет удалён, а символ обратной косой черты перед специальным символом (пробелом, обратной косой чертой, запятой и т.п.) будет обрабатываться так, как это описано выше.

Особая ситуация возникает в тех случаях, когда значение начинается с символов "\\":

:set dir=\\компьютер\путь        задаёт значение "\\компьютер\путь"
:set dir=\\\\компьютер\\путь     задаёт значение "\\компьютер\путь"
:set dir=\\путь\\файл        задаёт значение "\\путь\файл" (ошибка!)

В первом случае двойной символ косой черты сохраняется, а во втором случае двойной символ заменяется одинарным. Это позволяет обеспечить работоспособность как в том случае, когда вы ожидаете, что двойные символы обратной косой черты будут сокращены, так и в том случае, когда вы ожидаете, что двойные символы сокращаться не будут. Третий пример приводит, вероятно, к ошибочному результату.

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

:set guioptions+=a

Удаление флага из опции происходит так:

:set guioptions-=a

В данном случае удаляется флаг 'a' из опции 'guioptions'. Обратите внимание, что следует добавлять и удалять флаги по одному. Если значение опции 'guioptions' -- "ab", то команда "set guioptions-=ba" не сработает, поскольку в значении опции не встречается строка "ba".

В большинстве строковых опций выполняется подстановка значений переменных окружения. Если переменная окружения существует, то символ '$' и следующее за ним имя переменной заменяются на значение переменной. Если указанная переменная окружения не существует, то символ '$' и следующее за ним имя остаются без изменений. После имени переменной окружения может следовать любой неименной символ (т.е. не буква, не цифра и не '_'). Этот символ и любые последующие символы добавляются к значению переменной окружения. Примеры:

:set term=$TERM.new
:set path=/usr/$INCLUDE,$HOME/include,.

При добавлении или удалении строки из значения опции с помощью ":set opt-=val" или :set opt+=val" подстановка значения переменной выполняется до выполнения операции добавления или удаления.

Работа с местными опциями

Некоторые опции применяются только к окну или к буферу. Каждое окно или буфер имеет собственную копию такой опции, независимую от других окон или буферов. Это позволяет, например, включить опцию 'list' для одного окна и отключить её для другого, или установить значение опции 'shiftwidth' равным 3 в одном буфере и 4 в другом буфере.

Ниже поясняется, что происходит с такими местными опциями в определённых ситуациях. Обычно вам не требуется знать это, поскольку Vim как правило использует как раз те значения опций, которые и ожидает пользователь.  К сожалению, иногда выполнение ожидаемых пользователем действий является достаточно сложным процессом...

При разделении окна значения местных опций копируются в новое окно. Сразу после разделения окна содержимое обоих окон выглядит одинаково.

При редактировании нового буфера значения местных опций должны быть инициализированы. Поскольку местные опции текущего буфера могут быть определены специально для данного буфера, их значения не используются. Вместо этого используется глобальное значение для каждой из местных по отношению к буферу опций, которое применяется ко всем вновь созданным буферам. Команда ":set" изменяет как местное значение опции, так и глобальное значение, а команда ":setlocal" изменяет только местное значение, которое не будет использоваться при редактировании нового буфера.

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

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

:e one
:set list
:e two

то опция 'list' будет включена при редактировании "two", поскольку по команде ":set list" было изменено также и глобальное значение.

:set nolist
:e one
:setlocal list
:e two

В этом случае опция 'list' не будет включена, поскольку ":set nolist" выключает глобальное значение, а ":setlocal list" изменяет только локальное значение и при выполнении ":e two" применяется глобальное значение. Обратите внимание, что если затем выполнить команду

:e one

то опция 'list' не будет включена, как это было при последнем редактировании файла "one" в данном окне. Опции, которые являются местными по отношению к окну, не запоминаются для каждого буфера в отдельности.

:setl[ocal] ... Команда выполняется так же, как и ":set", но при этом изменяется значение, определённое как местное по отношению к текущему буферу или окну. Местные значения бывают не у всех опций. Если опция не имеет местного значения, то будет изменено глобальное значение.
Аргумент "all" позволяет показать местные значения всех местных опций.
Без аргумента эта команда показывает местные значения всех местных опций, которые отличаются от значений по умолчанию.
При просмотре значения определённой местной опции будет показано её местное значение. При просмотре значения глобальной опции будет показано глобальное значение (но такое поведение в будущем может быть изменено).
Vi не имеет такой возможности.
:setl[ocal] {опция}< Устанавливает местное значение {опции} равным её глобальному значению.
Vi не имеет такой возможности.
:setg[lobal] ... Команда выполняется так же, как и ":set", но при этом изменяется только глобальное значение для местной опции без изменения местного значения. При просмотре значения опции с помощью этой команды показывается глобальное значение. Аргумент "all" позволяет показать глобальные значения всех местных опций. При вызове команды без аргумента будут показаны глобальные значения всех местных опций, которые отличаются от значений по умолчанию.
Vi не имеет такой возможности.

Для опций, местных по отношению к окну или буферу:

Команда глобальное значение местное значение
:set опция=значение изменяется изменяется
:setlocal опция=значение - изменяется
:setglobal опция=значение изменяется -
:set опция? - отображается
:setlocal опция? - отображается
:setglobal опция? отображается -
Глобальные опции с местным значением

Опция является глобальной в тех случаях, когда для всех буферов используется одно и то же значение. Иногда полезно сделать так, чтобы какая-либо глобальная опция имела местное значение, которое отличалось бы от глобального. Установить такое местное значение можно при помощи команды ":setlocal", после выполнения которой текущий буфер станет использовать местное значение опции, а все остальные буферы будут по прежнему использовать глобальное значение.

Например, представьте, что у вас есть два окна, в каждом из которых открыты файлы с исходным текстом программ на языке C. Оба окна используют глобальную опцию 'makeprg'. Если в одном из окон выполнить команду

:set makeprg=gmake

то другое окно также станет использовать изменённое значение опции. Таким образом, изменять значение опции 'makeprg' в другом окне на "gmake" не требуется.

Предположим, однако, что в новом окне мы открываем файл с программой на языке Perl. В этом случае нам потребуется использовать другую программу 'makeprg', но изменять значение этой опции в двух других окнах, где открыты файлы с программами на языке C, нам бы не хотелось. В этом случае можно воспользоваться такой командой:

:setlocal makeprg=perlmake

Переключиться на использование глобального значения опции можно путём очистки местного значения:

:setlocal makeprg=

Это будет работать для строковой опции. Для булевой опции необходимо использовать флаг "<", например:

:setlocal autoread<

Обратите внимание, что остальные опции, кроме булевых, используют "<" для копирования глобального значения в местное значение, но не переключают окно на использование глобального значения опции (это имеет значение при последующем изменении глобального значения).

Замечание: В будущем количество глобальных опций, которые могут быть глобальными-местными, расширится. Использование команды ":setlocal" для глобальной опции в этом случае может работать иначе.

Настройка типа файла

:setf[iletype] {тип_файла}

Устанавливает значение опции 'filetype' равным {типу_файла}, если это ещё не было выполнено при помощи последовательности (вложенных) автокоманд. Эта запись является сокращённой формой сценария

:if !did_filetype()
:  setlocal filetype={filetype}
:endif

Эта команда используется в файле filetype.vim, чтобы избежать повторного назначения опции 'filetype', что приводит к загрузке новых файлов подсветки синтаксиса и изменению других настроек.
Vi не имеет такой возможности.

:bro[wse] se[t]
:opt[ions]
 Открывает окно для просмотра и настройки всех опций.
Опции группируются по предназначению.
В окне также указывается краткая справка для каждой опции. Если курсор находится на строке со справкой, то нажатие <CR>  открывает окно справки с более подробной информацией об этой опции.
Для изменения значения опции нужно ввести новое значение и нажать <CR> (курсор должен находиться на строке "set"). При настройке опций, имеющих отношение к буферу или окну, будет изменяться значение опции для окна, в котором до этого находился курсор, либо, если курсор находился в окне справки, то для окна, которое находится под окном справки (окно опций пропускается).
Доступно только в том случае, если Vim скомпилирован с особенностями |+eval| и |+autocmd|.

Символ "~" в начале значения опции и после пробела или запятой равноценен использованию переменной окружения "$HOME".

В Unix-системах также можно использовать форму "~user", которая приводится к значению домашнего каталога пользователя "user". Например:

:set path=~mool/include,/usr/include,.

Кроме того, на Unix-системах можно также использовать форму "${HOME}". Имя в фигурных скобках в этом случае может содержать неименные символы. Обратите внимание, что если вы желаете использовать это для команды "gf", то необходимо добавить символы '{' и '}' в значение опции 'isfname'.

ЗАМЕЧАНИЕ: подстановка переменных окружения и "~/" выполняется только в команде ":set", но не при изменении значения опции по команде ":let".

Обратите внимание, что максимальная длина опции после подстановки переменной ограничена. Величина ограничения зависит от операционной системы, как правило это 256 или 1024 символов.

:fix[del]

Настройка значения терминальной опции 't_kD':

значение 't_kb' значение 't_kD'
CTRL-? CTRL-H
не CTRL-? CTRL-?

(код символа CTRL-? в восьмеричной системе 0177, в шестнадцатеричной системе 0x7f)
Vi не имеет такой возможности.

Если код терминала для удаления символа в позиции курсора работает неправильно, хотя кнопка удаления символа слева от курсора работает нормально, то вы можете добавить в файл .vimrc команду

:fixdel

Эта команда позволяет исправить проблему независимо от действительного кода кнопки для удаления символа слева от курсора.

Если код терминала для кнопки удаления символа слева от курсора неправильный, то можно воспользоваться следующим сценарием:

:if &term == "termname"
:  set t_kb=^V<BS>
:  fixdel
:endif

Здесь "^V" это CTRL-V, а "<BS>" это кнопка удаления символа слева от курсора (а не четыре символа!). В этом сценарии следует заменить "termname" на имя вашего терминала.

Если кнопка <Delete> приводит к вводу странной последовательности символов (не CTRL-? или CTRL-H), то команда ":fixdel" работать не будет. В этом случае необходимо пользоваться таким сценарием:

:if &term == "termname"
:  set t_kD=^V<Delete>
:endif

Здесь "^V" это CTRL-V, а "<Delete>" это кнопка удаления символа в позиции курсора (а не восемь символов!). В этом сценарии следует заменить "termname" на имя вашего терминала.

Замечание о Linux: по умолчанию кнопка удаления символа слева от курсора приводит к вводу символа CTRL-?, что является неправильным. Это можно исправить при помощи следующей строки в файле rc.local:

echo "keycode 14 = BackSpace" | loadkeys

Замечание о NetBSD: Если кнопка удаления символа слева от курсора не приводит к выдаче нужного кода, то можно попробовать выполнить команду

xmodmap -e "keycode 22 = BackSpace"

В случае успеха следует добавить в файл .Xmodmap следующую строку:

keysym 22 = BackSpace

После этого следует перезапустить X Window.

2. Автоматическая настройка опций

Помимо изменения значений опций при помощи команды ":set" имеется три альтернативных метода автоматического изменения значений опций для одного или нескольких файлов:

  1. При запуске Vim инициализация опций выполняется из нескольких сценариев. См. раздел |инициализация|. Большинство операций по инициализации выполняется для всех последующих сеансов редактирования, а значение некоторых опций зависит от рабочего каталога, из которого был запущен Vim. Инициализационные файлы можно создать при помощи команд |:mkvimrc|, |:mkview| и |:mksession|.
  2. В начале редактирования нового файла также выполняются автоматические команды. Этим можно воспользоваться для установки опций для файлов, соответствующих шаблонам регулярных выражений, а также многих иных вещей. Подробнее об этом смотрите раздел |автокоманда|.
  3. Если в начале редактирования нового файла включена опция 'modeline', то ряд строк в начале и конце файла проверяется на наличие режимной строки. Подробности объясняются ниже.

Существует две формы режимной строки. Первая форма выглядит так:

[текст]{пробел}{vi:|vim:|ex:}[пробел]{опции}
[текст] любой текст или его отсутствие
{пробел} по крайней мере один пробельный символ (<Space> или <Tab>)
{vi:|vim:|ex:} строка "vi:", "vim:" или "ex:"
[пробел] необязательный пробел
{опции} список опций и их значений, разделённых пробелами или символом ':', где каждая часть между символами ':' является аргументом команды ":set".

Пример:

vi:noai:sw=3 ts=6

Вторая форма режимной строки совместима с некоторыми версиями Vi:

[текст]{пробел}{vi:|vim:|ex:}[пробел]se[t] {опции}:[текст]
[текст] любой текст или его отсутствие
{пробел} по крайней мере один пробельный символ (<Space> или <Tab>)
{vi:|vim:|ex:} строка "vi:", "vim:" или "ex:"
[пробел] необязательный пробел
se[t] строка "set " или "se " (обратите внимание на пробел)
{опции} список опций и их значений, разделённых пробелами, где каждая часть является аргументом команды ":set".
: двоеточие
[text] любой текст или его отсутствие

Пример:

/* vim: set ai tw=75: */

Пробел перед {vi:|vim:|ex:} является обязательным. Это уменьшает шанс, что обычное слово, например "lex:", будет ошибочно принято за начало режимной строки. Имеется одно исключение: "vi:" и "vim:" может также быть в самом начале строки (для совместимости с версией 3.0). Использование "ex:" в начале строки будет игнорироваться (поскольку это может быть сокращением английского слова "example:").

Опции из режимной строки устанавливаются так, как если бы их значения изменялись при помощи команды ":setlocal": новые значения применяются только к буферу, который содержит данное окно. Хотя режимная строка и позволяет изменять значения глобальных опций, такое использование весьма необычно. Если у вас открыто два окна и файлы, которые в них загружены, изменяют значения глобальных опций отлично друг от друга, то результат в конечном итоге зависит от того, какой файл был открыт в последнюю очередь.

Если режимная строка может быть использована не во всех версиях Vim, то вместо "vim:" можно указать версию редактора, в котором данная режимная строка применима:

vim{версия}: версия с номером {версия} или более поздняя
vim<{версия}: версия более ранняя, чем {версия}
vim={версия}: версия {версия}
vim>{версия}: версия после указанной {версии}

{версия} для Vim 6.0 записывается числом 600 (основная версия умноженная на 100 плюс подверсия).

Например, следующая режимная строка используется только в Vim 6.0 и более поздних версиях:

/* vim600: set foldmethod=marker: */

Чтобы использовать режимную строку только в версиях Vim перед 5.7:

/* vim<570: set sw=4: */

Между "vim" и ":" не должно быть пробелов.

Число строк, которые проверяются на наличие режимной строки задаётся опцией 'modelines'. Если опция 'modelines' выключена или значение опции 'modelines' равно 0, то файл не проверяется на наличие режимной строки.

Обратите также внимание, что в первой форме режимной строки используются все символы вплоть до конца строки, поэтому строка наподобие

/* vi:ts=4: */

приведёт к сообщению об ошибке, поскольку на хвосте строки имеются лишние символы "*/". Правильной строкой в таком случае будет

/* vi:set ts=4: */

При обнаружении ошибки во время разбора режимной строки оставшаяся часть строки игнорируется.

Если вы желаете включить в аргумент команды set символ ':', то его надо предварять символом '\'. Обратная косая черта перед символом ':' будет подавляться. Например:

/* vi:set dir=c\:\tmp: */

Эта команда задаёт значение опции 'dir' равным "c:\tmp". Удаляется только один символ перед символом ':', поэтому чтобы включить последовательность символов "\:" необходимо писать "\\:".

В режимной строке поддерживается использование только команды "set", что продиктовано соображениями безопасности: в противном случае вам могли бы подкинуть текстовый файл-троян, который бы использовал возможности режимной строки.

Совет: если вы хотите делать что-то ещё помимо изменения значений опций, то можно определить автокоманду, которая проверяет файл на наличие определённой строки. Например:

au BufReadPost * if getline(1) =~ "VAR" | call SetVar() | endif

После этого нужно определить функцию SetVar(), которая бы изменяла тем или иным образом строку, содержащую "VAR".

3. Список опций

В списке, который приводится ниже, все опции упоминаются как с полным, так и с сокращённым именем, если такое имеется. Вы можете использовать любую форму по своему усмотрению.

В этом документе подразумевается, что если булева опция включена, то это значит, что была введена команда ":set option". Если говорится, что опция выключена, то это значит была введена команда ":set nooption".

Некоторые опции имеют два значения по умолчанию: "по умолчанию Vim", которое используется, если опция 'compatible' выключена, и "по умолчанию Vi", которое используется при включённой опции 'compatible'.

Большая часть опций имеет одинаковое значение во всех окнах и буферах, за исключением ряда опций, которые относятся к отображению текста в окне. Такие опции могут иметь отдельное значение для каждого окна. Например, опция 'list' может быть включена в одном окне и выключена в другом для одного и того же текста, предоставляя возможность одновременно получить оба представления. Некоторые опции могут иметь значения, которые настраиваются отдельно для каждого файла. Например, опция 'textwidth' может иметь значение 78 для обычного текстового файла и 0 для файла с исходным текстом программы на  языке C.

глобальная одна опция для всех окон и буферов
местная для окна каждое окно использует собственную копию опции
местная для буфера каждый буфер использует собственную копию опции

При создании нового окна значения опций из текущего окна используются в качестве значений по умолчанию для опций, которые определяются для каждого окна в отдельности. Что касается опций, которые определяются для каждого отдельного буфера, то поведение редактора зависит от флагов 's' и 'S' в значении опции 'cpoptions'. Если в значении этой опции указан флаг 's' (по умолчанию), то значения буферных опций копируются из текущего буфера перед первоначальной загрузкой буфера. Если указан флаг 'S', то эти значения копируются при каждом переходе к данному буферу, т.е. практически поведение ничем не отличается от использования глобальных опций. Если же флаги 's' и 'S' не указаны в значении опции 'cpoptions', то опции копируются из текущего буфера при создании нового буфера.

Не все опции поддерживаются во всех версиях. Для проверки возможности использования некой опции "foo" в команде ":set" можно использовать функцию "exists('&foo')". Это, однако, не означает, что значение действительно можно присваивать той или иной опции. Некоторые опции являются скрытыми, поэтому присваиваемые им значения не запоминаются. Для проверки действительной поддержки той или иной опции в данной версии редактора используйте функцию "exists('+foo')".

Список всех опций с короткими описания и ссылками для перехода к более подробной информации можно посмотреть в Краткий справочник (Опции).

Опции: A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,R,S,T,U,V,W

Примечание к русскому переводу:

Пример языковой раскладки 'langmap' для греческого языка в русском справочнике заменён на аналогичный пример для русского языка.

См. |русская_раскладка_langmap|.