巻き毛装具に基づいてVIMのインデントを定義するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4829244

質問

私が使う https://github.com/cakebaker/scss-syntax.vim 構文の強調表示用 SCSS (また サス)VIM上のファイル。これは、構文の強調表示に非常に適しています。ただし、プラグインにはインデントファイルが付属しておらず、書くのに苦労しています。

インデントを次のように設定したいと思います:

enter image description here

しかし、もしそうなら gg=G, 、わかります:

enter image description here

ブレースに基づいて、ネストされたインデントを理解していないのではないかと思います。さまざまな組み合わせをすべて試しました

set cindent

set nocindent

set autoindent

set smartindent

からコードを使用しようとしました TABキー== VIMの巻き毛装具の後の4つのスペースとオートインデント 、 含む

set tabstop=2

set shiftwidth=2

set expandtab

...しかし、ネストされたブレースインデントは決して機能しないようです。

カスタムインデントファイルを書きたいと思うかもしれませんが、必要なのはネストされたレベルのブレースに基づいたインデンテーションだけです。どうすればいいですか?誰かが同様の構文を持つフィルタイプのインデントファイルを持っている場合、それも素晴らしいでしょう。

役に立ちましたか?

解決

これは、組み込みのPerlインデンテーションコードに基づいたクイックハックです( indent/perl.vim)。うまくいけば、あなたがやりたいことを手に入れるためにそれを使うことができます。詳細については、PerlインデントコードまたはIndentディレクトリの別のファイルのいずれかのより詳細なコメントを参照してください。

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

そのファイルをとして保存します ~/.vim/indent/something.vim どこ something ファイルタイプですか(交換してください ~/.vim への道があります vimfiles Windowsにいる場合。

また、ファイルの開始時にこれを貼り付けたいかもしれません(ただし、最初にロードされる可能性のある他のインデント宣言がない場合のみ):

" Only load this indent file when no other was loaded.
if exists("b:did_indent")
    finish
endif
let b:did_indent = 1
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top