我正在尝试用vim编辑文件并自动折叠POD(只是POD,而不是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