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

Рубрика "Секреты Вим". Сессии

Всем привет, сегодня рассмотрим, как сохранить свои настройки. В нашей рубрике уже была заметка про "выход в систему", где обсуждался и такой способ: сохранить состояние (открытые файлы, вкладки и окна, привязки и т.п.) и потом восстановить его. Обсудим подробнее.

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

Конечно, можно вручную записать все настроечные команды в файл и потом вызвать его через :source (можно :so). Можно использовать историю команд, кстати.

Один такой файл, .vimrc (в домашнем каталоге), вызывается автоматически при запуске Вим. Его обычно вручную и создают, хотя есть команда :mkvimrc, которая сделает это за вас. Опции, которые зависят от файла, не будут записаны, а все остальное — будет, и так можно обновить файл. Команда принимает имя файла (по умолчанию .vimrc в текущем каталоге), восклицательный знак после команды предписывает перезаписать файл, если он существует.

Но этот файл содержит общие настройки Вим. Аналогично можно сохранить "состояние": расположение окон и открытые вкладки, временные сокращения и привязки, выделение цветом, закладки и метки, подсветку искомого, фолды и многое другое. Вручную это можно тоже, но есть команда :mksession. Аналогично, имя по умолчанию Session.vim, a mksession! перезапишет файл. Расширение .vim будет добавлено, если расширение не указано.

Кусок файла Session.vim
Кусок файла Session.vim

Есть и понятие "вид" (view), это состояние одного окна. Мало ли что у вас в других, может вам надо сохранить только настройки этого данного документа (имеется в виду "настройки Вим": привязки, аббревиатуры, подсветка и т.д.). Команда mkview. Имя по умолчанию создается, если имя опущено или является числом от 1 до 9. При этом слева добавляется путь из переменной viewdir, это путь к папке с видами. Скорее всего, путь, заданный по умолчанию, вас устроит.

Открыть сессию или вид позволяет команда source, которая просто выполняет файл. Есть команда loadview, которая открывает вид, сохраненный командой mkview. Можно указать номер n, тогда откроется файл, созданный mkview n. Так вы можете сохранить 10 видов (9 с номерами и один без номера) и открыть их в любой момент. Где они лежат, Виму известно (вам тоже, это viewdir), но несущественно. Сохранили-открыли, очень удобно.

А можно создать автокоманду (о них в другой раз) и загружать настройки для файлов данного вида, например. Для фортрана это, для теха то, для перла еще что-нибудь. При открытии окна с файлом данного типа подгрузятся и соответствующие настройки.

Если имеется файл, имя которого совпадает с именем сессии плюс x.vim, то он тоже выполнится. Например, mksession! work создает work.vim, а при его загрузке через source выполнится также и workx.vim. Бывает удобно, а еще полезно для хакеров, шпионов и пранкеров. Например, создать у коллеги в home файлик Sessionx.vim и записать туда :qa!

Имя загруженной сессии хранится в переменной v:this_session. Так можно перезаписать текущую сессию, особенно полезно для привязок.

Что именно сохранять в сессии или виде, описывают переменные sessionoptions и viewoptions. Это список слов через запятую. См. справку, я перечислю не все возможности sessionoptions:

  • blank — сохранять пустые окна
  • buffers — все открытые файлы, не только вкладки и окна
  • folds — фолды
  • sesdir — текущим станет каталог, в котором лежит файл сессии. Удобно, если хотите перенести файл сессии в другой каталог. Если выставлена curdir, то текущий каталог будет сохранен в сессии и в него будет осуществлен переход. Если ни одна из этих двух возможностей не указана, сохраняются абсолютные пути. Между собой эти опции несовместимы.
  • tabpages — сохраняет все вкладки. Без этой опции сохраняется одна вкладка: так можно сохранить сессии для каждой вкладки отдельно.
  • options — сохраняет все опции и привязки.
  • unix — сохраняет юникс-стиль концов строк, даже на не-юниксе. А slash заменяет в путях обратные слеши на прямые. Интересно, что на Windows юниксовые сессии Вим читает, а наоборот — нет.

Для viewoptions вариантов меньше: cursor сохраняет позицию курсора, folds, options, slash, unix аналогичны.

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

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