java - standard - google style guides
¿Cómo hago vim indent java annotations correctamente? (3)
No debe modificar la configuración de vim incorporada. Sus cambios podrían desaparecer después de una actualización del paquete. Si lo copias a tu .vim, entonces no obtendrás ninguna corrección de errores de sangría de Java.
En su lugar, ponga lo siguiente en un nuevo archivo llamado ~/.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()
De esta forma, carga la sangría de stock de stock y solo modifica la sangría para eliminar las sangrías de anotación.
Al sangrar el código de Java con anotaciones, vim insiste en sangrar así:
@Test
public void ...
Quiero que la anotación esté en la misma columna que la definición del método, pero parece que no puedo encontrar una manera de decirle a vim que haga eso, excepto tal vez usar una expresión de sangría, pero no estoy seguro de si puedo usar eso junto con cindent regular
editar: el plugin de tipo de archivo ya estaba encendido. Me confundí un poco acerca de la sangría de complementos. La respuesta aceptada puede ser un poco hackosa pero también funciona para mí.
Encontré la sugerencia de pydave casi lo que quería, pero quería esto:
@Override
public void ...
y esto:
@Override public void ...
así que reemplacé la expresión regular (como por el de pydave, coloque en ~/.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
Editar: No puedo eliminar mi propia respuesta porque ya ha sido aceptada, pero la respuesta de @ pydave parece ser la mejor (más robusta) solución.
Probablemente deberías estar usando el archivo de sangría para el java FileType (en lugar de usar cindent) configurando lafiletype plugin indent on
filetype. Dicho esto, el archivo de sangría que viene con el Vim 7.1 de mi distribución de Linux (mirando el svn vim actual, esto sigue siendo cierto para el 7.2) aún no tiene en cuenta las anotaciones. Por lo tanto, copié /usr/share/vim/vim71/indent/java.vim
(consulte https://vim.svn.sourceforge.net/svnroot/vim/branches/vim7.1/runtime/indent/java.vim ) para ~/.vim/indent/java.vim
y agregó las siguientes líneas justo antes del final:
let lnum = prevnonblank(v:lnum - 1)
let line = getline(lnum)
if line =~ ''^/s*@.*$''
let theIndent = indent(lnum)
endif
No estoy seguro si esto rompe cualquiera de las otras sangrías, pero funciona para mí.