使用Vim,实现只折叠函数块的PHP代码折叠的最佳方法是什么?

使用Vim,实现只折叠函数块的PHP代码折叠的最佳方法是什么?,php,vim,folding,Php,Vim,Folding,我目前正在使用Vim编辑PHP文件,并且只想为函数实现代码折叠。我已尝试设置foldmethod=expr,并在.vimrc文件中使用带有foldexpr的正则表达式。问题是我不完全理解foldexpr是如何使用regex将折叠应用于源代码的,我似乎无法正确理解 基本上,我希望所有PHP函数(也在类内部)都折叠起来,就这样。最接近我的是: set foldexpr=getline(v:lnum-1)=~'function'?'>1':'=' 但这是不对的,我想看看我是否能用花括号更聪明一

我目前正在使用Vim编辑PHP文件,并且只想为函数实现代码折叠。我已尝试设置
foldmethod=expr
,并在.vimrc文件中使用带有
foldexpr
的正则表达式。问题是我不完全理解
foldexpr
是如何使用regex将折叠应用于源代码的,我似乎无法正确理解

基本上,我希望所有PHP函数(也在类内部)都折叠起来,就这样。最接近我的是:

set foldexpr=getline(v:lnum-1)=~'function'?'>1':'='
但这是不对的,我想看看我是否能用花括号更聪明一点


有什么想法吗?

IIRC折叠不适用于正则表达式,因为它会减慢vim的速度。通过使用foldmethod=indent并设置foldnestmax以限制创建的嵌套折叠的数量,您可能会得到想要的结果。

我通过使用内置PHP插件实现了所需的功能,该插件通过将其放入.vimrc文件而不使用任何其他折叠设置来激活

let php_folding = 1        "Set PHP folding of classes and functions.
let php_htmlInStrings = 1  "Syntax highlight HTML code inside PHP strings.
let php_sql_query = 1      "Syntax highlight SQL code inside PHP strings.
let php_noShortTags = 1    "Disable PHP short tags.
看看这本书

这比内置的
php_folding
语法要好得多,因为它理解phpdoc/doxygen docblocks,折叠代码以便仍然可以看到函数名(但隐藏其前面的文档)

例如:

这有点奇怪,你需要运行
:EnablePHPFolds
来更新东西,当我启动Vim时,我收到一条奇怪的消息(但这可能是因为我用Vundle安装了它),但这是一件美妙的事情


(也在中引用)

我已经转到另一个折叠插件