【发布时间】:2014-01-08 04:15:41
【问题描述】:
我正在使用由clang -emit-llvm 生成的 LLVM-IR 代码,并且希望代码折叠正常工作。
到目前为止,我使用的是 foldmethod=expr 和 foldexpr=LLVMFold()。
我想使用来自 llvm 存储库的语法文件来使用基于语法的折叠(即foldmethod=syntax)。 Available here.
请注意,第一个正则表达式来自标签的语法文件。
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
}
我希望折叠从define 的{ 到} 以及每个标记的部分,即从entry: 到清晰的线。
【问题讨论】:
标签: vim syntax folding llvm-ir