我有一个以函数定义开头的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中的任何其他设置,但插件除外。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top