E490:在unix for vim中未找到折叠

E490:在unix for vim中未找到折叠,vim,Vim,我是vim新手,喜欢精彩的文字 我想在缩进的基础上折叠perl脚本的代码。我在网上查了一下,发现我需要 将以下设置保存到我的vimrc文件中 "fold setting" "folding settings set foldmethod=indent "fold based on indent set foldnestmax=10 "deepest fold is 10 levels set nofoldenable

我是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
当我试图在vim中使用'za'cmd时,其抛出
E490:未找到折叠
错误

示例perl代码

        sub foo { #want to fold the code based on closing braces
            print "bar";
        }

我缺少了一些vim可以使用的东西

您可以将此脚本放入
~/.vim/ftplugin/perl.vim
(如果这些文件不存在,请创建它们)

函数GetPerlFold() 如果getline(v:lnum)=~'^\s*sub\s' 返回“>1” elseif getline(v:lnum)=~'\}\s*$' 让我的_perlnum=v:lnum 让我的_perlmax=行($) 而(1) 让my_perlnum=my_perlnum+1 如果我的perlnum>我的perlmax
return“在括号内添加另一行,如下所示

 sub foo { #want to fold the code based on closing braces
     print "foo";
     print "bar";
 }
将光标放在括号内的任何一行上,然后按
za
,此时光标应折叠

:h'折叠方法'

|fold-indent|   indent      Lines with equal indent form a fold.

因此,只有方法中缩进的行才会缩进。但是,如果只有一行,那么就没有理由折叠,因为它仍然会占用一行。

您的.vimrc中有
set nofoldenable
。这会关闭折叠。默认情况下,文件类型插件不会使用
set foldenable
打开折叠,它们只是假设已设置了可折叠的

作为第一步,从.vimrc中删除它。然后,您将使用在.vimrc中设置的“缩进”折叠方法

但是Perl和其他一些语言也基于语法定义了折叠规则

autocmd FileType perl set foldmethod=syntax
autocmd FileType perl set foldmethod=syntax