我正在尝试使用 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