我有一个以函数定义开头的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 {----------------------------------------
...
...
...
~
~
有没有人知道这个问题的好方法?
答案 0 :(得分:1)
我做了一些研究,找到了解决问题的方法:为了阻止vim从折叠函数直到文件结束,我必须在shExpr
的语法区域添加一个skip-statement(in文件sh.vim
,通常位于/usr/share/vim/vim70/syntax/
)之类的地方:
syn region shExpr ... start="{" skip="^function.*\_s\={" end="}" ...
此更改会阻止语法文件认为{
和}
属于shExpr组,当它们实际属于该功能组时。或者这就是我对它的理解,无论如何。
注意:此修复程序仅适用于以下语法:
function test
{
....
}
而不是这个:
function test {
....
}
对最后一个错误进行快速而又脏的修复是从@shFunctionList集群中删除shExpr。
答案 1 :(得分:0)
它应该可以工作,但语法文件中似乎有一个错误。折叠区域实际上从单词“function”开始并尝试继续关闭'}',但是'{...}'区域的突出显示接管结束'}'并且折叠继续搜索另一个一。如果你添加另一个'}',你可以看到这个:
function test {
...
}
}
答案 2 :(得分:0)
使用 vim 8.2+,以下对我有用:
syntax enable
let g:sh_fold_enabled=5
let g:is_sh=1
set filetype=on
set foldmethod=syntax
" :filteype plugin indent on
foldnestmax=3 "i use 3, change it to whatever you like.
我把它放在 vimrc 的什么地方并不重要。
这会为所有已安装的文件类型打开语法折叠和文件类型插件。