vimインデントJavaアノテーションを正しく作成するにはどうすればよいですか?

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

  •  03-07-2019
  •  | 
  •  

質問

アノテーションを使用してJavaコードをインデントする場合、vimは次のようなインデントを要求します。

@Test
    public void ...

メソッド定義と同じ列に注釈を入れたいが、インデント式を使用することを除いて、vimに指示する方法を見つけることができないようだが、使用できるかどうかわからない通常のcindentと一緒に。

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

役に立ちましたか?

解決

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


filetype plugin indent on を設定することにより、おそらく(cindentを使用する代わりに)java FileTypeのインデントファイルを使用する必要があります。

とは言っても、私の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

これにより他のインデントが壊れるかどうかはわかりませんが、うまくいきます。

他のヒント

ビルトイン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*@.*

この方法では、ストックJavaインデントを読み込み、インデントのみを変更して注釈のインデントを削除します。

let theIndent = indent(lnum) endif return theIndent endfunction setlocal indentexpr=GetJavaIndent_improved()

この方法では、ストックJavaインデントを読み込み、インデントのみを変更して注釈のインデントを削除します。

pydaveの提案は、私が望んでいたものとほぼ 見つけましたが、これが欲しかったです:

@Override
public void ...

およびこれ:

@Override public void ...

したがって、正規表現を置き換えました(pydaveの場合、〜/ .vim / after / indent / java.vim に配置):

setlocal indentexpr=GetJavaIndent_improved()

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top