簡體   English   中英

如何正確地使用vim indent java注釋?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM