23

アノテーションを使用してJavaコードをインデントする場合、vimは次のようにインデントすることを主張します。

@Test
    public void ...

アノテーションをメソッド定義と同じ列に配置したいのですが、インデント式を使用する場合を除いて、vimにそれを指示する方法が見つからないようですが、それを一緒に使用できるかどうかはわかりません通常のインデント。

編集:ファイルタイププラグインはすでにオンになっていますプラグインのインデントについて少し混乱しました。受け入れられた答えは少しハックかもしれませんが、私にとってもうまくいきます。

4

3 に答える 3

18

組み込みの vim 設定を変更しないでください。パッケージのアップグレード後に変更が消える可能性があります。それを .vim にコピーすると、Java インデントのバグ修正は得られません。

代わりに、以下を という名前の新しいファイルに入れます。~/.vim/after/indent/java.vim

function! GetJavaIndent_improved()
    let theIndent = GetJavaIndent()
    let lnum = prevnonblank(v:lnum - 1)
    let line = getline(lnum)
    if line =~ '^\s*@.*$'
        let theIndent = indent(lnum)
    endif

    return theIndent
endfunction
setlocal indentexpr=GetJavaIndent_improved()

このようにして、ストック Java インデントをロードし、インデントのみを変更して注釈インデントを削除します。

于 2010-12-10T22:50:13.093 に答える
10

編集:すでに受け入れられているため、自分の回答を削除することはできませんが、@ pydaveの回答の方が優れた(より堅牢な)ソリューションのようです。


を設定して、(cindent を使用する代わりに) Java FileType のインデント ファイルを使用する必要がありますfiletype plugin indent on

とは言うものの、私の Linux ディストリビューションの Vim 7.1 に付属するインデント ファイル (現在の vim svn を見ると、これは 7.2 にも当てはまります) はまだ注釈を考慮していません。したがって、次の行を最後の直前にコピーして/usr/share/vim/vim71/indent/java.vim( https://vim.svn.sourceforge.net/svnroot/vim/branches/vim7.1/runtime/indent/java.vimを参照) 、追加しました。~/.vim/indent/java.vim

let lnum = prevnonblank(v:lnum - 1)
let line = getline(lnum)
if line =~ '^\s*@.*$'
    let theIndent = indent(lnum)
endif

これが他のインデントを壊すかどうかはわかりませんが、私にとってはうまくいきます。

于 2008-10-17T11:38:52.640 に答える