6

私はhttps://github.com/cakebaker/scss-syntax.vimを使用して、vim でSCSS (またはSASS ) ファイルを構文強調表示します。これは、構文強調表示に非常に適しています。ただし、プラグインにはインデント ファイルが付属しておらず、インデント ファイルの作成に問題があります。

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

ここに画像の説明を入力

ただし、そうするとgg=G、次のようになります。

ここに画像の説明を入力

中括弧に基づくネストされたインデントを理解していないと思われます。いろいろな組み合わせを試してみた

set cindent

set nocindent

set autoindent

set smartindent

Tab キー == 4 スペースのコードを使用しようとし、Vimの中括弧の後に自動インデントを使用しようとしました。

set tabstop=2

set shiftwidth=2

set expandtab

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

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

4

1 に答える 1

10

これは、組み込みの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置き換えます。~/.vimvimfiles

ファイルの先頭にこれを貼り付けることもできます(ただし、最初にロードされる可能性のある他のインデント宣言がない場合のみ)。

" Only load this indent file when no other was loaded.
if exists("b:did_indent")
    finish
endif
let b:did_indent = 1
于 2011-01-28T14:45:54.367 に答える