Привет коллеги. Мы знаем, что в Вим есть много настроек: какие-то удобнее для одних файлов, какие-то для других. Также есть много способов эти настройки менять, и даже автоматически.
Можно, например, записать все команды в файлик и вызывать его вручную: source settings.vim
- Можно сделать автокоманду, чтобы при открытии данного файла (или файла, имя которого совпало с файловым шаблоном) выставлялись те или иные настройки.
- Можно сделать привязку, и одним нажатием на горячую клавишу включить настройки. Например, map <F3> :set textwidth=80 number fenc=cp1251 foldmethod=syntax
- Можно сохранить сессию или "вид", и открывать уже настроенную конфигурацию для данного вида работы. Сессии для всего редактора, виды для отдельных окон.
- Можно даже сделать свой собственный плагин, о чем в другой раз.
Но сегодня мы обсудим еще один способ: как задать немного настроек (именно флагов и опций/переменных) для одного конкретного файла. Этот способ хорош тем, что настройки хранятся в самом файле, а не в недрах Вим, и поэтому на другом компьютере или под другим пользователем всё будет работать.
Это называется modeline: "строка режима". Прямо в файле, обычно в конце (но можно и в начале) можно разместить указания для Вим. А чтобы не мешали, их можно оформить как комментарий, если речь об языке программирования.
Есть две формы таких строк. Одна такая:
[любой текст]{пробелы}{vi[m]:|ex:}[пробелы]{опции}
, где опции имеют вид опция[=значение] и разделяются пробелами или двоеточиями. Команды set не надо. В форме perl-регулярного выражения:
^.*\s+(vim?|ex):\s*(\w+(=\w+)?[ :])*\w+(=\w+)?\s*$
Например, % vim: textwidth=92 nonu shiftwidth=4 filetype=tex ff=unix fenc=cp1251
Вторая отличается несильно: маркер, кроме vi, vim, ex, может быть Vim; перед заданием опций должен стоять set, один на всех; после может идти любой текст. В формате регулярного выражения:
.*\s+([vV]im?|ex):\s*set\s+(\w+(=\w+)?[ :])*\w+(=\w+)?.*
Пример: /* vim: set ai tw=92 nu foldmethod=syntax */
Пробел перед vim обязателен. В первой форме вся строка, после "vim:" рассматривается как опции, там ничего другого быть не должно. Во второй форме обязательно слово set, зато может быть произвольный закрывающий текст. Смотрите только, чтобы он не распознался как опция! Если такой опции не существует, ничего страшного не будет, а вот если есть, то можно случайно сбить. Но это маловероятно.
Проверяется некоторое число строк в начале и в конце файла; оно указано в переменной modelines. По умолчанию 5. Кроме того, проверка осуществляется, если выставлен флаг modeline. Если флаг сброшен (set nomodeline) или если modelines=0, проверка не осуществляется.
По умолчанию проверка отключена, из соображений безопасности.
Можно только задавать опции! Это тоже для безопасности.
Можно приписать к vim версию. Это число, полученное умножением целой части на сто и прибавлением дробной. Так, вим 8.1 будет vim801. Варианты:
vim700: версия 7.0 или новее.
vim<800: версия до 8.0
vim>700: версия новее 7.0
vim=800: только версия 8.0
Это может быть полезно, чтобы старый Вим не мучился опциями, которых не знает, а новый не включал старые средства.
В принципе, вы можете все любимые настройки внести прямо в тексты глав своей диссертации или в шаблон файла программы на чем вы там пишете. Но особенно важно это для указания типа файла, если у него нестандартное расширение; включения или отключения фолдинга, чтобы сразу был или, наоборот, отсутствовал. Полезно указать ширину текста, чтобы избежать ненужных переносов. И тому подобное.
Имейте в виду, что задавать кодировку имеет смысл не всегда. Если файл в кодировке cp1251, например, и на русском, то он считается неправильно. Кодировку надо при чтении указывать. А вот концы строк (ff) может быть полезно указать.
Вы можете посмотреть примеры в любом файле справки в самом конце. Вот, скажем, из того же файла справки, где описано автоматическое выставление опций (help auto-setting): vim:tw=78:ts=8:ft=help:norl:
Удачи, коллеги!