题
我有一个以函数定义开头的bash脚本文件,如下所示:
#!/bin/bash
# .....
# .....
function test {
...
...
}
...
...
我使用vim 7.2,并设置 g:sh_fold_enabled = 1
,以便使用bash启用折叠。问题是功能测试的折叠没有正确结束,即它持续到文件结束。它看起来像这样:
#!/bin/bash
# .....
# .....
+-- 550 lines: function test {----------------------------------------
~
~
这个函数本身只有大约40行,我想要一些看起来像这样的东西(“图像”说的不仅仅是一个thousend的话,他们说......):
#!/bin/bash
# .....
# .....
+-- 40 lines: function test {----------------------------------------
...
...
...
~
~
有没有人知道这个问题的好方法?
解决方案
我做了一些研究,并找到了解决问题的方法:为了阻止vim从折叠函数直到文件结束,我不得不在 shExpr
(在 sh.vim
文件中,通常放在 / usr / share / vim / vim70 / syntax /
之类的地方):
syn region shExpr ... start="{" skip="^function.*\_s\={" end="}" ...
此更改会阻止语法文件认为 {
和}
属于shExpr组,当它们实际属于函数组时。或者这就是我对它的理解,无论如何。
注意:此修复程序仅适用于以下语法:
function test
{
....
}
而不是这个:
function test {
....
}
对最后一个错误进行快速而又脏的修复是从@shFunctionList集群中删除shExpr。
其他提示
它应该可以工作,但语法文件中似乎有一个错误。折叠区域实际上从单词“function”开始并尝试继续关闭'}',但是'{...}'区域的突出显示接管结束'}'并且折叠继续搜索另一个一。如果你添加另一个'}',你可以看到这个:
function test {
...
}
}
Reddit 似乎有一个更简单的解决方案。
在帖子中引用作者:
我使用的选项是:
syntax=enable filetype=sh foldmethod=syntax let g:sh_fold_enabled=3 g:is_sh=1
编辑:解决方法
vim -u NONE -c'get g:sh_fold_enabled = 7'-c':set fdm = syntax'-c'sy 在'file.sh
上
g:sh_fold_enabled = 4似乎是讨论中商定的折叠级别。这个解决方案对我来说非常合适。我没有必要编辑语法文件。
编辑:g:sh_fold_enabled = 5实际上是正确的。不是4。 另外,正如海报在Reddit上展示的那样,这些命令必须先于vimrc中的任何其他设置,但插件除外。