clang -emit-llvm
에 의해 생성 된 LLVM-IR 코드로 작업 중이며 코드 폴딩 작업을 원합니다.Vim을위한 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로 접어 넣습니다. 또한 시도
이 샘플 불완전 LLVM-IR 코드에 대한 이상적 foldmark="{,}"
와 충분히 접하지 않았다 foldmethod=indent
및 foldmethod=marker
을이었다 : 나는 주름이 define
의 {
까지 싶습니다
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
}
}
및 각 레이블이있는 섹션 (예 :
entry:
에서 명확한 라인까지).
구문 강조 표시와 ftdetect는 내 [GitHub] (https://github.com/EdJoJob/llvmir-vim)에서 사용할 수 있습니다. – EdJoJob