これは、組み込みのperlインデントコード(in)に基づく簡単なハックindent/perl.vim
です。うまくいけば、あなたはそれを使ってあなたがやりたいことを手に入れることができます。詳細については、perlインデントコードまたはインデントディレクトリ内の別のファイルのコメントを参照してください。
setlocal indentexpr=GetMyIndent()
function! GetMyIndent()
let cline = getline(v:lnum)
" Find a non-blank line above the current line.
let lnum = prevnonblank(v:lnum - 1)
" Hit the start of the file, use zero indent.
if lnum == 0
return 0
endif
let line = getline(lnum)
let ind = indent(lnum)
" Indent blocks enclosed by {}, (), or []
" Find a real opening brace
let bracepos = match(line, '[(){}\[\]]', matchend(line, '^\s*[)}\]]'))
while bracepos != -1
let brace = strpart(line, bracepos, 1)
if brace == '(' || brace == '{' || brace == '['
let ind = ind + &sw
else
let ind = ind - &sw
endif
let bracepos = match(line, '[(){}\[\]]', bracepos + 1)
endwhile
let bracepos = matchend(cline, '^\s*[)}\]]')
if bracepos != -1
let ind = ind - &sw
endif
return ind
endfunction
そのファイルをファイルタイプとして保存します(Windowsを使用している~/.vim/indent/something.vim
場合は、へのパスにsomething
置き換えます。~/.vim
vimfiles
ファイルの先頭にこれを貼り付けることもできます(ただし、最初にロードされる可能性のある他のインデント宣言がない場合のみ)。
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1