如何正确地使用vim indent java注释?

时间:2008-10-14 12:24:42

标签: java vim annotations

当使用注释缩进java代码时,vim坚持这样缩进:

@Test
    public void ...

我希望注释与方法定义位于同一列中,但我似乎找不到告诉vim这样做的方法,除了可能使用缩进表达式但我不确定是否可以使用与常规的cindent一起。

编辑:文件类型插件已经打开我只是对缩进插件感到有点困惑。接受的答案可能有点hackish但也适合我。

3 个答案:

答案 0 :(得分: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缩进,只修改缩进以删除注释缩进。

答案 1 :(得分:9)

编辑:我无法删除自己的答案,因为它已被接受,但@pydave's answer似乎是更好(更强大)的解决方案。

<小时/> 您可能应该通过设置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

我不确定这是否会破坏任何其他缩进,但它对我有效。

答案 2 :(得分:1)

我发现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