代码之家  ›  专栏  ›  技术社区  ›  wds

如何正确地进行VIM缩进Java注释?

  •  20
  • wds  · 技术社区  · 16 年前

    当用注释缩进Java代码时,VIM坚持这样的缩进:

    @Test
        public void ...
    

    我希望注释与方法定义在同一列中,但是我似乎找不到一种方法来告诉Vim这样做,除非可能使用缩进表达式,但我不确定是否可以将它与常规Cindent一起使用。

    编辑:filetype插件已经打开了,我对缩进插件有点困惑。公认的答案可能有点老套,但对我也适用。

    3 回复  |  直到 11 年前
        1
  •  9
  •   Community rohancragg    7 年前

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


    您可能应该通过设置使用Java文件类型的缩进文件(而不是使用CIMDENT)。 filetype plugin indent on .

    也就是说,我的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
  •  18
  •   idbrii    14 年前

    您不应该修改内置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 Java缩进,并且只修改缩进以删除注释缩进。

        3
  •  1
  •   Will Richey    11 年前

    我找到了派戴夫的建议 几乎 我想要什么,但我想要这个:

    @Override
    public void ...
    

    这是:

    @Override public void ...
    

    所以我更换了regex(根据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