Найти тему
Блокнот математика

Рубрика "Секреты Вим". Команда set

Привет, коллеги. Поговорим об опциях.

Есть в Вим есть большое число опций, которые я называю иногда переменными или флагами. Опция может быть логической (флаг), числовой или текстовой. Например, number логическая, textwidth числовая, а statusline текстовая. Опции позволяют настраивать работу в Вим, делая ее более удобной. Выставляет их команда set, которая таит довольно много секретов.

Редактор опций. Они сгруппированы по темам, можно перемещаться по группам, читать кратко, подробно, выставлять значения. См. ниже.
Редактор опций. Они сгруппированы по темам, можно перемещаться по группам, читать кратко, подробно, выставлять значения. См. ниже.

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

Так, просто :set выведет значения всех опций, которые имеют другое значение, не по умолчанию. А set all и set termcap выведут ВСЕ опции, кроме терминальных, и все терминальные опции.

Это массовка. Теперь индивидуальная работа. Команда set опция? выведет значение опции. Это работает со всеми тремя типами (логическим, числовым, текстовым), но полезно для флагов. Сейчас станет ясно, почему.

Потому что set опция для флага выставит флаг в истину, а для числовых и текстовых опций покажет значение. Чтобы сбросить флаг, добавьте no перед опцией, то есть выставьте флаг noопция. Например, set nonumber.

Еще флаги можно переключать: set опция! Восклицательный знак и означает "выключить включенное, включить выключенное". Как вариант, можно добавить перед опцией inv: set invnumber.

Можно вернуть значение по умолчанию. Конечно, можно посмотреть в Справке и выставить его, но Вим же знает сам, какое значение по умолчанию: set опция&

Ну и вариант массовки: set all& вернет все опции к заводским значениям. На самом деле, не все, есть исключения: терминальные опции, метод и ключ шифрования, кодировка... И эффект может быть довольно резким, так что осторожнее, пожалуйста.

Нюанс: set опция& вернет опцию к значению по умолчанию Вим. Но если выставлен флаг compatible, то Вим старается походить на vi, ну и сами понимаете. Можно уточнить, чего вы хотите: set опция&vim (или set опция&vi).

Если выставлено ненулевое значение опции verbose, то на запрос значения опции будет дано сообщение, где оно было выставлено. Может быть иногда полезно.

Это все хорошо, но мы не добрались еще собственно до задания опций. Только флаги можем выставлять и сбрасывать. Числовую или текстовую переменную зададим так: set опция=значение. Вместо знака = можно поставить двоеточие. Пробел перед = или : допустим, после — нет. Числовое значение может быть десятичным, семеричным (в начале 0) или шестнадцатеричным (0x). Дойдя до знака равенства, можно нажать табуляцию и подставится старое значение. Если набрать часть имени опции и нажать таб, появятся варианты.

Можно не просто задать переменную, но добавить к ней что-то, изменить переменную относительно. Для чисел это сумма в стиле x=x+a (или x+=a), для текста — конкатенация, но умная. Команда set опция+=значение. Если, например, опция есть список чего-то, разделенного запятыми или чем-то еще, то set отработает правильно: добавит запятую, если она нужна, и не будет добавлять просимое, если оно уже присутствует. Главное, добавлять сущности по одной, а не сразу пачками.

Примеры:
set shiftwidth+=2
set path+=/home/myself/
set formatoptions+=a

Аналогично, можно уменьшить числовую переменную или удалить текст из текстовой: set опция-=значение. Для текста команда работает интеллектуально. Так, если в опции список через запятую а,б,в и вы вычтите б, то все отработает как надо. Получится а,в

Есть еще и третий, малоизвестный вариант: set опция^=значение. Для чисел это умножение опции на число, для строк конкатенация спереди. Например, пути проверяются, начиная с начала, и если надо вставить более приоритетный путь, то это самое оно.

Примеры:
set shiftwidth^=2
set path^=/home/myself/

А вот деления нет, отменить содеянное для числовых опций так просто не получится! Для текстовых списков получится: вычитание удалит просимое, даже если оно не в конце.

Можно задавать сразу много опций одной командой:
set nu sw=4 nosi ts=3 tw=80

Если допущена ошибка, Вим о ней сообщит и все, что после ошибочного аргумента, не обработает.

Как вы заметили, имена опций можно сокращать.

Для текстовых опций, если вам нужны пробелы и другие спецсимволы, их надо экранировать слешем. Например, set titlestring=I\ love\ Vim. Сам слеш тоже экранируется и действует правило: число идущих подряд слешей преобразуется в половину, с округлением вниз. Так, \\\ и \\ одинаково дадут \, а \\\\ и \\\\\ дадут \\. Двойную кавычку надо экранировать, так как она начинает комментарий.

И последнее: есть удобный интерфейс для изучения и выставления опций! Он включается командами :options или :browse set и выводит группы опций (см. скриншот выше), которые можно раскрывать. Дана и справка по опциям, что полезно и для изучения, и для настройки Вим в удобном режиме. Потом сессия или mkvimrc позволят вам сохранить достигнутое.

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

Оглавление рубрики

Путеводитель по каналу