我正在使用 LLVM-IR 代码,它由生成clang -emit-llvm
并希望使代码折叠工作。
到目前为止,我正在使用foldmethod=expr
and foldexpr=LLVMFold()
。我想使用foldmethod=syntax
来自 llvm 存储库的语法文件来使用基于语法的折叠(即)。在这里可用。
请注意,第一个正则表达式来自标签的语法文件。
function! LLVMFolds()
let thisline = getline(v:lnum)
if match(thisline, '^[-a-zA-Z$._][-a-zA-Z$._0-9]*:') >= 0
return ">2"
elseif match(thisline, '^\}$') >= 0
return "<1"
elseif match(thisline, '{$') >= 0
return ">1"
else
return "="
endif
endfunction
它将闭合大括号吞噬到 2 级折叠中。
还尝试了foldmethod=indent
哪些折叠不够,并且foldmethod=marker
对于foldmark="{,}"
这个示例不完整的 LLVM-IR 代码来说理想情况下:
define i32 @main() nounwind {
entry:
%retval = alloca i32, align 4
for.cond: ; preds = %entry
%4 = load i32* %i, align 4
%cmp1 = icmp slt i32 %4, 10
br i1 %cmp1, label %for.body, label %for.end
}
我希望在每个标记的部分中折叠从 the{
到define
the }
,即从 theentry:
到清晰线。