Автор Тема: VIM: сохранение складок, созданных вручную  (Прочитано 1896 раз)

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
(Уровень: новичок, освоивший основные приемы работы в vim)
Vim позволяет создавать складки (свертки, фолдинги) несколькими методами. Особенно интересен (по крайней мере, для меня) метод определения складок вручную. Если у вас, например, есть некое обширное руководство, в котором десяток главок, каждая строк по 100 - 200 и более, перемещение по такому файлу - занятие скучное. Но можно каждую главку свернуть в складку, и тогда весь документ будет занимать 1 -1,5 экрана, а смена главок - секунду.
Для ручного способа создания складок в файле ~/.vimrc нужно записать
set foldenable   " включить фолдинг
set foldmethod=manual    " определять блоки вручную
Создавать складки можно несколькими способами, самые простые таковы:
в визуальном режиме выделяем нужные строки и нажимаем zf;
в командном режиме выполняем
:n1,n2foгде n1 и n2 - номера первой и последней строк создаваемой складки.
Однако созданные складки не сохраняются автоматически, и перед закрытием буфера надо дать команду
:mkviewНо и в этом случае, снова открыв документ, мы не увидим своих складок, пока не скомандуем
:loadviewСлишком много телодвижений, скажете вы, и будете правы. Чтобы их избежать, пропишем в ~/.vimrc еще пару строк:
au BufWritePost * mkview   "заставляет vim сохранять созданные складки без команды :mkview
au BufReadPost * silent loadview  "заставляет vim сворачивать складки при открытии документа
Вот теперь, сохранив документ с созданными складками, при следующем открытии мы увидим их свернутыми.
Напомню, что закрытые складки открываются (а открытые - закрываются) клавишей пробел.

Некоторые тонкости:
поскольку автокоманда BufWritePost требует сохранения файла, штамп времени файла изменится. Если это нежелательно, придется таки выполнить команду :mkview перед закрытием буфера без сохранения;
как всегда при задании в .vimrc'e автокоманд требуется некоторая осмотрительность. Скажем, если у вас прописана автокоманда
if has("autocmd")                                                                                                     
    au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
открывающая документ на той строке, где вы закрыли его в прошлый раз, то в результате описанных выше действий она не будет работать, если вы закрыли документ, находясь внутри складки.
И последнее. Поскольку создание/удаление складок не изменяет файл, складки можно создавать даже в документах, открываемых vim'ом "только для чтения", например, .odt, .doc и т.п.





« Последнее редактирование: 29 Март 2011, 14:09:10 от Brego »
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем