当使用注解缩进 java 代码时,vim 坚持这样缩进:
@Test
public void ...
我希望注释与方法定义在同一列中,但我似乎无法找到一种方法来告诉 vim 这样做,除非可能使用缩进表达式,但我不确定是否可以将它与定期的 cindent。
编辑:文件类型插件已经打开我只是对缩进插件有点困惑。接受的答案可能有点骇人听闻,但也适用于我。
当使用注解缩进 java 代码时,vim 坚持这样缩进:
@Test
public void ...
我希望注释与方法定义在同一列中,但我似乎无法找到一种方法来告诉 vim 这样做,除非可能使用缩进表达式,但我不确定是否可以将它与定期的 cindent。
编辑:文件类型插件已经打开我只是对缩进插件有点困惑。接受的答案可能有点骇人听闻,但也适用于我。
你不应该修改内置的 vim 设置。您的更改可能会在软件包升级后消失。如果你将它复制到你的 .vim 中,那么你将不会得到任何 java 缩进 bug 修复。
相反,将以下内容放入一个名为的新文件中~/.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
。
也就是说,我的 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