当使用注释缩进java代码时,vim坚持这样缩进:
@Test
public void ...
我希望注释与方法定义位于同一列中,但我似乎找不到告诉vim这样做的方法,除了可能使用缩进表达式但我不确定是否可以使用与常规的cindent一起。
编辑:文件类型插件已经打开我只是对缩进插件感到有点困惑。接受的答案可能有点hackish但也适合我。
答案 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