Question

En mettant en retrait le code Java avec des annotations, vim insiste pour mettre en retrait de la manière suivante:

@Test
    public void ...

Je veux que l'annotation se trouve dans la même colonne que la définition de la méthode, mais je n'arrive pas à trouver le moyen de le dire à vim, sauf peut-être utiliser une expression d'indentation, mais je ne suis pas sûr de pouvoir utiliser cela avec cindent régulier.

edit: Le plugin filetype était déjà activé, je suis un peu confus quant à l'indentation des plugins. La réponse acceptée est peut-être un peu féroce, mais fonctionne aussi pour moi.

Était-ce utile?

La solution

Modifier: Je ne peux pas supprimer ma propre réponse car elle a déjà été acceptée, mais la réponse de @ pydave semble être la meilleure solution (plus robuste).


Vous devriez probablement utiliser le fichier d'indentation pour le FileType java (au lieu d'utiliser cindent) en définissant indent du plugin filetype sur .

Cela dit, le fichier d'indentation fourni avec Vim 7.1 à partir de ma distribution Linux (en regardant l'actuel vim svn, cela reste vrai pour la version 7.2) ne prend pas encore en compte les annotations. J'ai donc copié /usr/share/vim/vim71/indent/java.vim (voir https://vim.svn.sourceforge.net/svnroot/vim/branches/vim7.1/runtime/indent/java.vim ) vers ~ / .vim / indent / java.vim et a ajouté les lignes suivantes juste avant la fin:

let lnum = prevnonblank(v:lnum - 1)
let line = getline(lnum)
if line =~ '^\s*@.*

Je ne suis pas sûr que cela casse l'un des autres renfoncements, mais cela fonctionne pour moi.

let theIndent = indent(lnum) endif

Je ne suis pas sûr que cela casse l'un des autres renfoncements, mais cela fonctionne pour moi.

Autres conseils

Vous ne devez pas modifier les paramètres vim intégrés. Vos modifications pourraient disparaître après une mise à niveau du paquet. Si vous le copiez sur votre fichier .vim, vous ne obtiendrez aucun correctif de bogue de Java.

À la place, insérez ce qui suit dans un nouveau fichier nommé ~ / .vim / after / indent / java.vim

function! GetJavaIndent_improved()
    let theIndent = GetJavaIndent()
    let lnum = prevnonblank(v:lnum - 1)
    let line = getline(lnum)
    if line =~ '^\s*@.*

De cette façon, il charge le retrait stock Java et ne modifie que le retrait pour supprimer les retraits d'annotation.

let theIndent = indent(lnum) endif return theIndent endfunction setlocal indentexpr=GetJavaIndent_improved()

De cette façon, il charge le retrait stock Java et ne modifie que le retrait pour supprimer les retraits d'annotation.

J'ai trouvé la suggestion de pydave presque ce que je voulais, mais je voulais ceci:

@Override
public void ...

et ceci:

@Override public void ...

alors j'ai remplacé l'expression régulière (comme pour pydave, placez-la dans ~ / .vim / après / 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top