E490:unix中没有为vim找到折叠

时间:2014-08-26 18:24:01

标签: 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        "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工作的东西

3 个答案:

答案 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.

因此只有方法内的缩进线会缩进。但是,如果只有一条线,则没有理由折叠,因为它仍然会占用一条线。