Qu'est-ce qui contrôle l'indentation des lignes suivant un crochet carré ouvert lors de l'utilisation de cindent?

8

J'essaie de créer mon propre fichier de retrait pour JavaScript. Le fichier d'indentation par défaut pour JavaScript est activé, avec un minimum de modifications, et je l'utilise comme base.

Sur Vim 7.3 pour OSX El Capitan, la saisie d'un tableau produit par défaut les éléments suivants:

var test = [
1,
    2,
    3
    ];

Et notez que même si ce n'est pas du JavaScript légal, j'ai remarqué que l'utilisation d'une virgule ne produit pas un comportement légèrement différent:

var test = [
1
2
3
];

Sur 7.4, taper les deux exemples ci-dessus produit ce que j'attends:

var test = [
    1,
    2,
    3
];

var test = [
    1
    2
    3
];

Cependant, si vous incluez certains caractères immédiatement après le crochet ouvert, cela revient en arrière:

var test = [1
2,
    3,
    4
];

Qu'est-ce qui contrôle l'indentation des lignes entre crochets ainsi que le placement du crochet carré de fermeture? Lors de la visualisation de la documentation Vim , je ne vois pas de valeur cinoptions qui capture cela.

Ryan Jarvis
la source
1
Avez-vous essayé celui-ci github.com/pangloss/vim-javascript ?
Ôrel
1
J'ai, mais ce plugin semble indenter tout à partir de zéro en utilisant des fonctions VimScript personnalisées au lieu de règles intégrées.
Ryan Jarvis

Réponses:

1

À en juger par votre commentaire ci-dessus, vous souhaitez utiliser uniquement cinoptionspour contrôler le retrait pour les crochets. Ce n'était tout simplement pas possible avant 7.4.355 d'après ce que je vois dans le code source . Cliquez sur blâme en haut pour voir la version balisée, mais cela va prendre un certain temps à charger.

Comme il semble que cinoptionsc'était à l'origine pour C, C ++ et Java, il ne traitait que les accolades et les parenthèses car les crochets sont utilisés pour définir les tailles de tableau ou accéder aux index dans ces langages - pas les initialiser.

Qu'est-ce qui contrôle l'indentation des lignes entre crochets ainsi que le placement du crochet carré de fermeture?

Après 7.4.355, c'est l' Joption qui contrôle l'indentation, mais rien spécifiquement pour les crochets. D'après ce que j'ai ignoré dans la source, l' Joption signifie uniquement que la syntaxe JavaScript doit être prise en compte ( curbuf->b_ind_js). Il recherche une ligne précédente terminée par une virgule ou un crochet ouvrant pour s'aligner. Dans votre quatrième exemple, la ligne se termine par un 1, donc cela n'augmente pas l'indentation.

Si la première ligne de votre quatrième exemple se terminait par un [ou ,(ou les deux [,), les lignes suivantes augmenteraient le retrait.

Tommy A
la source