2010-08-09 8 views
17

Ich kämpfe gerade mit Vim, ich kann nicht scheinen, die Einrückungsoptionen zu machen, was ich will.Wie vim Einrückung von Switch-Fall zu deaktivieren?

Hier sind meine Einstellungen, ich habe sie am Ende von .vimrc, um sicherzustellen, dass sie Vorrang haben. Wie man sehen kann ich ein wenig verrückt werde, so habe ich versuchte fast alles ausschalten:

set cindent 
set cinkeys=o,O 
set cinoptions= 
set cinwords= 
set indentexpr= 

In den meisten Fällen ist es gut zu funktionieren scheint, hat es einen Gedankenstrich nach einem Block zu öffnen und alles ist in Ordnung. Aber es gibt einen Fall, den ich verrückt fährt, wenn es ein { nach einer case Aussage ist, die nächste Zeile viel zu weit eingekerbt:

switch() { 
    case CASE: { 
        // <-- next line gets indented to here, why?? 
     // <-- should be indented to here 

Wie kann ich es machen stoppt dies zu tun? TIA

+0

Wenn Sie neugierig sind, können Sie mit dem seltsamen Verhalten eine Anweisung in derselben Zeile wie die Groß-/Kleinschreibung schreiben, mit zusätzlichen Anweisungen, die auf die erste ausgerichtet sind, zum Beispiel 'case CASE: x = 1; '¶' y = 2; 'wobei x und y in derselben Spalte stehen. – Will

Antwort

18
:set cinoptions=l1 

(das ist der Brief ell gefolgt von einer Nummer eins)

Blick auf: cinoptions-Wert für den Standard-String und Beschreibungen der verschiedenen Optionen helfen.

+0

Das hat den Trick, danke! – andy

1

Wenn ich manuell Ihre set Befehle eintrage, bekomme ich keinerlei Einrückung. Haben Sie sich die Ausgabe von :set all angesehen, um zu bestätigen, dass Ihre Einstellungen nicht überschrieben werden?

Hinweis: Dies sollte wahrscheinlich in einem Kommentar sein, aber diese Option ist derzeit nicht zulässig.

+0

Ich hatte das Gefühl, dass etwas Fischiges vor sich ging, aber ich sehe nichts Überraschendes, wenn ich '' set all'' ansehe. Vielleicht verwendet es seinen eigenen geheimen Standard, wenn ich diese Optionen leer lasse? Weiß ich nicht .. – andy

+0

Interessanterweise habe ich GVim 7.2.269 unter Windows benutzt, als ich es zuerst ausprobierte. Als ich es erneut unter Linux mit 7.2.330 versuchte, entsprachen meine Ergebnisse Ihrem OP. – rlduffy

1

Wenn indent N Leerzeichen ist (ersetzen N mit Ist-Wert), versuchen Sie die folgenden

set cinoptions=p0,t0,:N,=0 
set cinwords=if,else,switch,case,for,while,do 
set cindent 

: N -> Ort 'Fall' Label 0 Zeichen von Schalter des indent

= 0 -> Einzüge Die Anweisungen innerhalb des Falllabels

Verwandte Themen