2009-01-05 66 views
4

我有与一个函数定义开始bash脚本文件,这样的问题庆典。问题是功能测试的折叠没有正确结束,即它持续到文件结束。它看起来是这样的:A和在vim折叠的bash功能

#!/bin/bash 
# ..... 
# ..... 
+-- 550 lines: function test {---------------------------------------- 
~ 
~ 

的功能本身就是约40行,和我想要的东西,lookes像这样(“图片”说比thousend词,他们说...):

#!/bin/bash 
# ..... 
# ..... 
+-- 40 lines: function test {---------------------------------------- 
... 
... 
... 
~ 
~ 

有没有人知道这个问题的一个很好的解决方案?

回答

0

我做了一些研究,发现了一种方法来解决这个问题:从折叠功能,直到文件的末尾停止VIM,我有添加一个跳跃语句的语法区域为shExpr(文件sh.vim中,通常放在像/usr/share/vim/vim70/syntax/某处):

syn region shExpr ... start="{" skip="^function.*\_s\={" end="}" ... 

这种变化来自以为{}属于shExpr组停止语法文件,当他们实际上属于功能组。无论如何,这就是我的理解。

注意:此修复程序只适用于以下几种语法:

function test 
{ 
.... 
} 

而不是这样的:

function test { 
.... 
} 

一个快速和肮脏的修复过去的错误是从去除shExpr @ shFunctionList集群。

0

它应该只是工作,但似乎有语法文件中的错误。折叠区域实际上从单词'function'开始,并尝试继续关闭'}',但'{...}'区域的突出显示接管关闭'}',折叠继续搜索另一个区域一。如果添加另一个“}”,你可以在行动中看到这一点:

function test { 
    ... 
} 
} 
0

Reddit似乎有一个更简单的解决方案。

引述在帖子作者:

选项我用的都是:

syntax=enable 

filetype=sh 

foldmethod=syntax 

let g:sh_fold_enabled=3 

g:is_sh=1 

编辑:解决方法

的vim -u NONE -c“让G:sh_fold_enabled = 7' -c ':上 'file.sh设置FDM =语法' -c' SY

g:sh_fold_enabled = 4似乎是讨论中商定的折叠级别。这个解决方案对我来说是完美的。我不必编辑语法文件。

编辑:g:sh_fold_enabled = 5实际上是正确的。不是4。 另外,正如海报在Reddit上显示的那样,这些命令必须在vimrc中的任何其他设置之前进行,除了插件之外。