[英]How do I make vim indent java annotations correctly?
在使用注釋縮進java代碼時,vim堅持這樣縮進:
@Test
public void ...
我希望注釋與方法定義在同一列中,但我似乎找不到告訴vim這樣做的方法,除了可能使用縮進表達式,但我不確定我是否可以將它與常規的。
編輯:文件類型插件已經打開我只是對縮進插件有點困惑。 接受的答案可能有點hackish但也適合我。
您不應該修改內置的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縮進,只修改縮進以刪除注釋縮進。
編輯:我無法刪除自己的答案,因為它已被接受,但@pydave的答案似乎是更好(更強大)的解決方案。
filetype plugin indent on
來使用java FileType的縮進文件(而不是使用cindent)。
也就是說,來自我的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
我不確定這是否打破了任何其他縮進,但它對我有用。
我發現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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.