【发布时间】:2014-08-25 21:48:15
【问题描述】:
Vim 支持基于语法的 C 代码折叠,效果很好。 但是函数名不是折叠的一部分,只是 { 和 } 之间的部分。
鉴于此示例代码:
static inline bool uFuzzyCompare(double p1, double p2)
{
return (uAbs(p1 - p2) <= 0.000000000001 * uMin(uAbs(p1), uAbs(p2)));
}
static inline bool uFuzzyComparef(float p1, float p2)
{
return (uAbsf(p1 - p2) <= 0.00001f * uMinf(uAbsf(p1), uAbsf(p2)));
}
static inline bool uFuzzyIsNull(double d)
{
return uAbs(d) <= 0.000000000001;
}
static inline bool uFuzzyIsNullf(float f)
{
return uAbs(f) <= 0.00001f;
}
这看起来像这样折叠:
static inline bool uFuzzyCompare(double p1, double p2)
+-- 3 lines: {----------------------------------------------------------------------------------------------------------------------------------------------------------------
static inline bool uFuzzyComparef(float p1, float p2)
+-- 3 lines: {----------------------------------------------------------------------------------------------------------------------------------------------------------------
static inline bool uFuzzyIsNull(double d)
+-- 3 lines: {----------------------------------------------------------------------------------------------------------------------------------------------------------------
static inline bool uFuzzyIsNullf(float f)
+-- 3 lines: {----------------------------------------------------------------------------------------------------------------------------------------------------------------
我更喜欢这个:
+-- uFuzzyCompare(...) (5 lines)
+-- uFuzzyComparef(...) (5 lines)
+-- uFuzzyIsNull(...) (5 lines)
+-- uFuzzyIsNullf(...) (5 lines)
这意味着将函数声明包含在折叠中以及空白行中,并将函数名称显示为折叠文本。
这有可能吗? 也许使用 foldmethod 表达式,但我不知道在不编写完整的 C 解析器的情况下创建此表达式的好方法。 所以使用语法解析器是最好的,但我找不到任何配置选项。
问候, 格哈德
【问题讨论】: