Привет всем, продолжаем обсуждать сохранение "состояния" своей работы в Вим. Я уже рассказывал про сессии и виды (для сохранения всего состояния и для каждого окна отдельно), там же затронут и файл настроек .vimrc, а теперь уделим внимание файлу .viminfo. В нем сохраняется автоматически некоторая информация, которую не хотелось бы потерять при выходе из Вим:
- Содержимое регистров
- Метки, в том числе межфайловые
- Последнее выражение замены
- Глобальные переменные
- И кое-что еще.
Все это хорошо дополняет сессии, позволяя комфортно продолжать прерванную работу.
В Линукс и других *nix этот файл обычно пребывает в домашнем каталоге.
Файл читается при запуске Вим, а при выходе туда записывается упомянутая информация. Что именно записывается, зависит от переменной viminfo, которую я описывать не буду: скорее всего, она делает именно то, что вам надо. См. help. В ней можно указать, что именно сохранять и сколько, в каком файле, и, например, надо ли пытаться перекодировать текст из кодировки при сохраненияя в кодировку текущую.
Если есть надобность запустить Вим с другим файлом, есть ключ -i.
Если при чтении файла .viminfo произошла ошибка, файл не будет перезаписан. Если ошибок много, чтение прерывается. Имейте это в виду, если собираетесь вручную редактировать файл!
Файл .viminfo содержит удаляемый текст и другую ценную информацию, поэтому нежелательно, чтобы его читали другие. Вим защищает файл, но полезно иметь в виду эту уязвимость. Особенно если вы открываете кому-то доступ к этому файлу при работе над общим документом и забываете закрыть. Файл .viminfo один!
Из соображений безопасности этот файл не может быть символической ссылкой. А жесткой ссылкой может, что тоже может быть уязвимостью.
Метка " (двойная кавычка) позволяет прыгнуть на последнюю позицию курсора в данном файле. Метка 0 хранит позицию курсора при выходе из Вим, вместе с именем файла, положительные числовые метки хранят предыдущие позиции (до 9 включительно). Числовые метки работают только с viminfo.
Можно сохранить и прочитать файл произвольно, для этого есть команды :rviminfo и :wviminfo. Обеим можно указать имя файла, если файл не по умолчанию. Также есть вариант с воклицательным знаком, который предписывает заменить информацию: на то, что в файле, при чтении, и в самом файле при записи. Точнее, при записи файла без ! он сначала читается, информация объединяется и записывается (при этом метки-числа сдвигаются). А с ! файл просто перезаписывается.
Команда :oldfiles покажет, в какие файлы можно перейти по сохраненным меткам.
Напоследок, вот полезная автокоманда (не моя, но не помню, откуда взял): при открытии файла осуществляется переход на последнюю известную позицию. Проще говоря, открыв файл, вы окажетесь там, где были при выходе. Если позиция уже не существует, переход не осуществляется.
augroup INF
autocmd!
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
augroup END
Как видите, просходит проверка, чтобы номер строки был между нулем и последнем строкой, и если да, то прыжок на метку ". Автокоманда автоматически выполняется при наступлении события, в данном случае при открытии буфера (файла).
Поместите этот код в .vimrc и наслаждайтесь!
Удачи, коллеги.