我是vim新手,喜欢崇高的文字
我想在perl脚本的缩进上折叠代码库。我在网上看了一下,发现我需要制作 将以下设置放入我的vimrc文件
"fold setting"
"folding settings
set foldmethod=indent "fold based on indent
set foldnestmax=10 "deepest fold is 10 levels
set nofoldenable "dont fold by default
set foldlevel=1 "this is just what i use
当我尝试使用' za'在vim中cmd抛出E490: No fold found
错误
示例perl代码
sub foo { #want to fold the code based on closing braces
print "bar";
}
我是否缺少vim工作的东西
答案 0 :(得分:2)
您可以将此脚本放在~/.vim/ftplugin/perl.vim
内(如果这些文件尚不存在,则创建这些文件)。
function GetPerlFold()
if getline(v:lnum) =~ '^\s*sub\s'
return ">1"
elseif getline(v:lnum) =~ '\}\s*$'
let my_perlnum = v:lnum
let my_perlmax = line("$")
while (1)
let my_perlnum = my_perlnum + 1
if my_perlnum > my_perlmax
return "<1"
endif
let my_perldata = getline(my_perlnum)
if my_perldata =~ '^\s*\(\#.*\)\?$'
" do nothing
elseif my_perldata =~ '^\s*sub\s'
return "<1"
else
return "="
endif
endwhile
else
return "="
endif
endfunction
setlocal foldexpr=GetPerlFold()
setlocal foldmethod=ex
此代码取自here。
确保从set foldmethod=indent
.vimrc
现在perl中的subs应该正确折叠。
答案 1 :(得分:1)
你的.vimrc中有set nofoldenable
。这会关闭折叠。文件类型插件默认情况下不会使用set foldenable
启用折叠,只是假设foldenable
已设置。
作为第一步,从.vimrc中删除它。然后你将使用&#34;缩进&#34; foldmethod你也在你的.vimrc中设置。
但Perl和其他一些语言也定义了基于语法的折叠规则。要为Perl启用此功能,请将以下内容添加到.vimrc:
autocmd FileType perl set foldmethod=syntax
答案 2 :(得分:0)
在括号内添加另一行,如此
sub foo { #want to fold the code based on closing braces
print "foo";
print "bar";
}
将光标放在括号内内的任意一行,然后按za
,它现在应折叠。
:h 'foldmethod'
|fold-indent| indent Lines with equal indent form a fold.
因此只有方法内的缩进线会缩进。但是,如果只有一条线,则没有理由折叠,因为它仍然会占用一条线。