Nemerle是一种类似C语言的语言,并且与cindent
的效果非常好。但是,其类似于switch
的构造称为match
:
match (x) // switch (x)
{ // {
| "Hello World" => ... // case "Hello World": ...
| _ => ... // default: ...
} // }
是否可以将cinoptions
switch
语句应用于此构造,而不是?也许我可以设置一个正则表达式。如果没有,我可以让垂直条与另一种方式对齐吗?
以下是我提出的建议:
" Vim indent file
" Language: Nemerle
" Maintainer: Alexey Badalov
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
" Nemerle is C-like, but without switch statements or labels.
setlocal cindent cinoptions=L0
" Enable '|', disable ':'.
setlocal indentkeys=0{,0},0),0#,0\|,!^F,o,O,e
setlocal indentexpr=GetNemerleIndent()
let b:undo_indent = "setl cin< cino< indentkeys< indentexpr<"
function! GetNemerleIndent()
" Nemerle is C-like; use built-in C indentation as a basis.
let indent = cindent(v:lnum)
" Set alignment for lines starting with '|' in line with the opening
" brace. Use default indentation outside of blocks.
if getline(v:lnum) =~ '^\s*|'
call cursor(v:lnum, 1)
silent! normal [{
if line('.') == v:lnum
return indent
endif
return indent(line('.'))
endif
return indent
endfunction
答案 0 :(得分:3)
请参阅:h indent-expression
以获得Vim文档的立足点。基本上我认为你会想要为你的文件类型编写你自己的“缩进文件”,这将返回一个带有匹配结构的适当空格的indentexpr,否则(假设只是更改)返回通常的cindent()值。它涉及的不仅仅是设置正则表达式,缩进文件将具有Vim命令和结构来评估行并返回正确的值。正如文档所述,了解其工作原理的最佳方法是查看其他语言的某些缩进文件。 。 。 。 (C没有缩进文件供您查看,因为它全部集成到Vim自己的c源代码中,但大多数其他语言都使用Vimscript缩进文件。)