vim中折叠bash函数的一个问题
我有一个bash脚本文件,它以函数定义开头,如下所示:vim中折叠bash函数的一个问题,bash,vim,folding,Bash,Vim,Folding,我有一个bash脚本文件,它以函数定义开头,如下所示: #!/bin/bash # ..... # ..... function test { ... ... } ... ... #!/bin/bash # ..... # ..... +-- 550 lines: function test {---------------------------------------- ~ ~ 我使用vim 7.2,并设置了g:sh_fold_enabled=1,这样就可以使用bash启用折叠。问题是功
#!/bin/bash
# .....
# .....
function test {
...
...
}
...
...
#!/bin/bash
# .....
# .....
+-- 550 lines: function test {----------------------------------------
~
~
我使用vim 7.2,并设置了g:sh_fold_enabled=1
,这样就可以使用bash启用折叠。问题是功能测试的折叠没有正确结束,即它一直持续到文件结束。它看起来像这样:
#!/bin/bash
# .....
# .....
function test {
...
...
}
...
...
#!/bin/bash
# .....
# .....
+-- 550 lines: function test {----------------------------------------
~
~
函数本身只有大约40行,我想要这样的东西(“图像”说的不止一千个单词,他们说…):
有人知道解决这个问题的好方法吗?应该可以,但是语法文件中似乎有一个bug。折叠区域实际上从单词“function”开始,并尝试继续到结束“}”,但“{…}”区域的高亮显示将接管结束“}”,折叠继续搜索另一个。如果添加另一个“}”,则可以看到此操作:
function test {
...
}
}
我做了一些研究,并找到了解决问题的方法:为了阻止vim折叠函数直到文件结束,我必须在
shExpr
的语法区域中添加一个skip语句(在文件sh.vim
中,通常放在类似/usr/share/vim/vim70/syntax/
的地方):
此更改使语法文件不再认为{
和}
属于shExpr组,而实际上它们属于函数组。或者这就是我对它的理解
注意:此修复程序仅适用于以下语法:
function test
{
....
}
而不是为了这个:
function test {
....
}
最后一个bug的快速修复方法是从@shFunctionList集群中删除SHXPR。上似乎有一个更简单的解决方案 引用文章作者的话: 我使用的选项有:
syntax=enable
filetype=sh
foldmethod=syntax
let g:sh_fold_enabled=3
g:is_sh=1
编辑:变通方法
vim-u NONE-c'let g:sh_fold_enabled=7'-c':set fdm=syntax'-c'sy
关于'file.sh
g:sh_fold_enabled=4似乎是讨论中商定的折叠级别。这个解决方案对我来说非常有效。我不必编辑语法文件
编辑:g:sh\u fold\u enabled=5实际上是正确的。不是4。
此外,正如Reddit上的海报所示,这些命令必须先于vimrc中的任何其他设置,插件除外。对于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里的什么地方
这将为所有安装的文件类型打开语法折叠和文件类型插件