Was steuert die Einrückung von Linien nach einer offenen eckigen Klammer, wenn cindent verwendet wird?


8

Ich versuche, meine eigene Einrückungsdatei für JavaScript zu erstellen. Die Standard-Einrückungsdatei für JavaScript wird mit minimalen Änderungen aktiviert, und ich verwende sie als Basis.

Unter Vim 7.3 für OSX El Capitan führt die Eingabe eines Arrays standardmäßig zu folgenden Ergebnissen:

var test = [
1,
    2,
    3
    ];

Beachten Sie, dass JavaScript zwar kein legales JavaScript ist, ich jedoch festgestellt habe, dass die Verwendung eines Kommas zu einem etwas anderen Verhalten führt:

var test = [
1
2
3
];

Wenn Sie in 7.4 die beiden obigen Beispiele eingeben, erhalten Sie das, was ich erwarte:

var test = [
    1,
    2,
    3
];

var test = [
    1
    2
    3
];

Wenn Sie jedoch einige Zeichen unmittelbar nach der offenen eckigen Klammer einfügen, ist dies nicht mehr der Fall:

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

Was steuert die Einrückung der Linien zwischen eckigen Klammern sowie die Platzierung der schließenden eckigen Klammer? Beim Anzeigen der Vim-Dokumentation wird kein Cinoptions-Wert angezeigt, der dies erfasst.


1
Haben Sie dieses github.com/pangloss/vim-javascript ausprobiert ?
26rel

1
Ich habe aber dieses Plugin scheint alles von Grund auf mit benutzerdefinierten VimScript-Funktionen anstelle von eingebauten Regeln einzurücken.
Ryan Jarvis

Antworten:


1

Nach Ihrem obigen Kommentar möchten Sie nur cinoptionsden Einzug für eckige Klammern steuern. Nach dem, was ich im Quellcode sehe, war es vor 7.4.355 einfach nicht möglich . Klicken Sie oben auf "Schuld", um die getaggte Version anzuzeigen. Das Laden dauert jedoch eine Weile.

Da es cinoptionsursprünglich für C, C ++ und Java gedacht war, wurden nur geschweifte Klammern und Klammern behandelt, da eckige Klammern zum Definieren von Arraygrößen oder zum Zugreifen auf Indizes in diesen Sprachen verwendet werden - ohne sie zu initialisieren.

Was steuert die Einrückung der Linien zwischen eckigen Klammern sowie die Platzierung der schließenden eckigen Klammer?

Nach 7.4.355 ist es die JOption, die den Einzug steuert, jedoch nichts spezielles für eckige Klammern. Nach dem, was ich in der Quelle beschönigt habe, bedeutet die JOption nur, dass die JavaScript-Syntax berücksichtigt werden sollte ( curbuf->b_ind_js). Es wird nach einer vorherigen Zeile gesucht, die durch ein Komma oder eine öffnende Klammer abgeschlossen wird. In Ihrem vierten Beispiel endet die Zeile mit einem 1, sodass die Einrückung nicht erhöht wird.

Wenn die erste Zeile in Ihrem vierten Beispiel mit einem [oder ,(oder beiden [,) endet, erhöhen die nachfolgenden Zeilen den Einzug.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.