vimインデントJavaアノテーションを正しく作成するにはどうすればよいですか?
-
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