Как я могу автоматически сворачивать POD в Perl с помощью vim?
Вопрос
Я пытаюсь редактировать файлы с помощью vim и автоматически сворачивать модуль (только модуль, а не Perl).Я не могу заставить это сработать.Я могу заставить само сворачивание работать, потому что я могу вручную выделить линии и ввести zF
и он правильно складывается.
Кто-нибудь может пролить свет на это?
Решение
Ты забыл
:set foldmethod=syntax
:setf perl
:syntax on
:set foldenable
:syn region POD start=/^=head[123]/ end=/^=cut/ fold
Другие советы
Вставьте следующее в конец из вашего файла ~/.vimrc:
fu! MyFoldSettings()
set foldmethod=expr
set foldexpression=MyFoldLevel(v:lnum)
set foldenable
set foldminlines=1
endf
fu! MyFoldLevel(lev)
let mytext = getline(a:lev)
let result="="
if mytext =~ '^=item'
let result=">3"
elsei mytext =~ '^=back'
let result="<2"
elsei mytext =~ '^=over'
let result=">2"
elsei mytext =~ '^=cut'
let result="<1"
elsei mytext =~ '^=\w\+'
let result='>1'
en
return result
endf
augroup MyFoldSettings_AutoCommands
au!
au BufReadPost {*.pl,*.pod,*.pm} MyFoldSettings()
augroup END
Это должно сработать в большинстве случаев - это просто быстрый и грязный пример, но вы можете добавить к нему больше, если вам нужно больше функциональности.Кроме того, чтобы убедиться, что это включено, вы можете захотеть добавить линию модели:
# vim:fen:fdo=hor:fcl=all:fdm=expr:fde=MyFoldLevel(v:lnum):fml=1
Если на этом этапе вы не видите сложенный текст, попробуйте установить 'foldopen=hor' и 'foldclose=all', что упростит навигацию по сгибам.Кроме того, если вам нужно применить это к другим файлам или типам файлов, вы можете соответствующим образом настроить au (автокоманду).Ваше здоровье.
Вы можете поместить это в свой файл .vimrc:
au FileType perl
\ setlocal foldexpr=getline(v:lnum)=~'^=cut'?'<1':getline(v:lnum)=~'^='?'1':'=' |
\ setlocal foldmethod=expr
Просто определите переменные perl_fold_*, системный индикатор синтаксиса perl позаботится обо всем остальном.
В .vimrc просто добавьте
let perl_fold=1
let perl_fold_blocks=1
Это то, что я использую,
set syntax
augroup perl_folding
au!
autocmd FileType perl setlocal foldmethod=syntax
autocmd FileType perl setlocal foldlevel=1
autocmd FileType perl let perl_fold = 1
autocmd FileType perl let perl_fold_blocks = 1
autocmd FileType perl setlocal foldenable
au BufRead,BufNewFile *.pm set filetype=perl
augroup END