你试过'lisp'
选项吗?它产生
[foo [bar baz] [qux
[do a thing]
[more doing a thing]
[^ ()
; some stuff here
[foobar]]]]
[back to here]
在你的例子。
您也可以构建自己的indentexpr
. 一个非常简单的将是
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
if exists('*shiftwidth')
let s:shiftwidth=function('shiftwidth')
else
function s:shiftwidth()
return &shiftwidth
endfunction
endif
function! YourLangIndent(lnum)
if a:lnum==1
return 0
endif
let line=getline(a:lnum-1)
return indent(prevnonblank(a:lnum-1))+s:shiftwidth()*(len(substitute(line, '[^[]', '', 'g'))-len(substitute(line, '[^]]', '', 'g')))
endfunction
setlocal indentexpr=YourLangIndent(v:lnum)
let b:undo_indent='setlocal indentexpr<'
. 其结果:
[foo [bar baz] [qux
[do a thing]
[more doing a thing]
[^ ()
; some stuff here
[foobar]]]]
[back to here]
(对于&sw
设置为 4,设置为 2 的空格数量的一半&sw
)。