Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vim中折叠bash函数的一个问题_Bash_Vim_Folding - Fatal编程技术网

vim中折叠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启用折叠。问题是功

我有一个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里的什么地方

这将为所有安装的文件类型打开语法折叠和文件类型插件