Wie kann ich AutoFold POD in Perl mit vim?
Frage
Ich versuche, Dateien mit Vim zu bearbeiten und die POD automatisch gefaltet (nur das POD, nicht das Perl) zu erhalten. Ich kann es nicht bekommen zu arbeiten. Ich kann Falten selbst zu arbeiten, weil ich manuell die Linien und Typ zF
markieren und es klappt einwandfrei.
Kann jemand beleuchten das?
Lösung
Sie haben vergessen,
:set foldmethod=syntax
:setf perl
:syntax on
:set foldenable
:syn region POD start=/^=head[123]/ end=/^=cut/ fold
Andere Tipps
Fügen Sie folgende an dem Ende Ihre ~ / .vimrc-Datei:
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
Dies sollte in den meisten Fällen funktioniert - Es ist nur ein schnelles und schmutziges Beispiel, aber Sie können mehr zu es hinzufügen, wenn Sie mehr Funktionalität benötigen. Auch, um sicherzustellen, dass diese aktiviert ist Sie möglicherweise die Modeline hinzufügen möchten:
# vim:fen:fdo=hor:fcl=all:fdm=expr:fde=MyFoldLevel(v:lnum):fml=1
Wenn Sie an dieser Stelle sehen gefaltet Text nicht, versuchen Sie den ‚foldopen = hor‘ und Einstellung ‚foldclose = alle‘ die Navigation machen wird in / aus leichten Falten. Auch, wenn Sie benötigen diese auf andere Dateien oder filetyps angewendet werden, können Sie die au (automatische Befehl) entsprechend eingerichtet. Prost.
Sie können Ihre .vimrc setzen diese in:
au FileType perl
\ setlocal foldexpr=getline(v:lnum)=~'^=cut'?'<1':getline(v:lnum)=~'^='?'1':'=' |
\ setlocal foldmethod=expr
Just perl_fold_ * Variablen definieren, wobei das System Perl Syntax-Highlighter Pflege des Restes.
In .vimrc, fügen Sie einfach
let perl_fold=1
let perl_fold_blocks=1
Dies ist, was ich verwende,
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