如何正确地使vim缩进java注释?
缩进时带注解的Java代码,VIM坚持缩进这样的:如何正确地使vim缩进java注释?
@Test
public void ...
我想要的注释是在同一列的方法定义,但我似乎无法找到一种方法来告诉VIM要做到这一点,除了可能使用缩进表达式,但我不知道是否可以将它与常规cindent一起使用。
编辑:filetype插件已打开我对缩进插件有点困惑。被接受的答案可能有点骇人听闻,但也适用于我。
编辑:我不能删除我自己的答案,因为它已被接受,但@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
我不知道这是否破坏任何其他缺口,但它为我工作。
您不应该修改内置的vim设置。软件包升级后,您的更改可能会消失。如果你将它复制到.vim中,那么你将不会得到任何java indent错误修复。
相反,把以下到一个新文件名为~/.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的建议几乎我想要的东西,但我想这一点:
@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
这对我没有用 - 我在最后添加了它。我正在使用vim 7.2 我在做什么错? – Naseer 2009-03-30 09:59:53
:facepalm:现在工作 - 我正在添加它在最后,而不是在函数的结尾:D 谢谢! – Naseer 2009-03-30 10:04:12