1

NemerleはCに似た言語であり、ほとんどの場合、で非常にうまく機能しcindentます。ただし、に類似したその構成は次のようswitchに呼ばれmatchます。

match (x)                // switch (x)
{                        // {
| "Hello World" => ...   // case "Hello World": ...
| _ => ...               // default: ...
}                        // }

cinoptions代わりに、 forswitchステートメントをこの構成に適用することは可能ですか?どこかに設定できる正規表現があるかもしれません。そうでない場合は、垂直バーを別の方法でブレースに揃えることができますか?


アップデート

これが私が思いついたものです:

" 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
4

1 に答える 1

3

:h indent-expressionVimのドキュメントで足がかりを得るために参照してください。基本的に、ファイルタイプに独自の「インデントファイル」を作成することをお勧めします。これにより、一致構造に適切なスペースを含むindentexprが返されます。それ以外の場合は、通常のcindent()値が返されます。正規表現を設定するだけでなく、インデントファイルには行を評価して正しい値を返すためのVimコマンドと構造が含まれます。ドキュメントにあるように、それらがどのように機能するかを学ぶ最良の方法は、他の言語のインデントファイルのいくつかを調べることです。。。。(CにはすべてVim独自のcソースコードに統合されているため、確認できるインデントファイルはありませんが、他のほとんどの言語にはVimscriptを使用したインデントファイルがあります。)

于 2011-11-28T08:26:43.173 に答える