Vim ist sehr zuvorkommend, wenn es um Tab Vs. Raumpräferenzen. Soweit ich weiß, gibt die tabstop
Einstellung die Breite eines Tabulatorzeichens an. Die shiftwidth
Einstellung gibt an, wie viele Spalten bei Verwendung der Befehle <<und inkrementiert / dekrementiert >>werden sollen, während die softtabstop
Einstellung die Anzahl der Leerzeichen beeinflusst, die beim Drücken der TabTaste im Einfügemodus eingefügt werden sollen. Wenn diese expandtab
Option aktiviert ist, fügt die Tabulatortaste die softtabstop
Anzahl der Leerzeichen ein. Während bei expandtab
ausgeschaltetem Gerät durch Drücken der TabTaste eine möglichst geringe Anzahl von Tabulatortasten + Leerzeichen eingefügt wird softtabstop
. (Bitte korrigiere mich wenn ich falsch liege.)
Dieser letzte Punkt lässt mich fragen: Gibt es einen praktischen Fall, in dem Sie nicht wollen würden shiftwidth == tabstop && tabstop == softtabstop
? Mir fällt keiner ein. Für mich wäre es am bequemsten, wenn ich alle drei in einer einzigen Aufgabe auf den gleichen Wert setzen könnte. zB anrufen:
:set stab=4
Das wäre gleichbedeutend mit Laufen:
:set tabstop=4 softtabstop=4 shiftwidth=4
Kann jemand vorschlagen, wie dies getan werden könnte?
AKTUALISIEREN
Vielen Dank für die bisherigen Antworten von zu viel PHP , Hobbs und kaiser.se . Anstatt auf jede Frage einzeln zu antworten, aktualisiere ich die Frage hier.
Softtabstop bei ausgeschaltetem expandtab
Ich habe oben gesagt, dass bei ausgeschaltetem expandtab durch Drücken der Tabulatortaste die kleinstmögliche Anzahl von Tabulatortasten + Leerzeichen eingefügt wird, die übereinstimmen softtabstop
. Ich stehe dazu, aber ich denke, ich muss erklären, was ich meinte. Ich werde dies anhand einiger Beispiele versuchen. Führen :set list
Sie den Vorgang aus , damit Sie Tabulatorzeichen sehen können.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
Im Einfügemodus werden durch Drücken der Tabulatortaste 2 Leerzeichen eingefügt. Drücken Sie die Tabulatortaste ein zweites Mal, und anstatt zwei weitere Leerzeichen (für insgesamt 4 Leerzeichen) einzufügen, werden die vorherigen 2 Leerzeichen durch ein einzelnes Tabulatorzeichen ersetzt. Tabstop ist auf 4 gesetzt, sodass ein einzelnes Tabulatorzeichen die gleiche Breite wie 4 Leerzeichen hat.
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
Im Einfügemodus werden durch Drücken der Tabulatortaste 1 Tabulatorzeichen plus 2 Leerzeichen eingefügt. Das Tabulatorzeichen hat eine Breite von 4, die Gesamtbreite beträgt also 6, und dies wird mit 3 Zeichen erreicht. Durch ein zweites Drücken der Tabulatortaste werden zwei Tabulatorzeichen eingefügt und die beiden zuvor eingefügten Leerzeichen entfernt. Die Gesamtbreite beträgt 12, und dies wird mit 3 Zeichen erreicht.
In beiden Beispielen fügt Vim die minimal mögliche Anzahl von Tabulator- und Leerzeichen ein, die mit Softtabstop übereinstimmt.
Wenn ich mit ausgeschaltetem expandtab arbeite, kann ich mir nicht vorstellen, dass ich die zusätzliche granulare Steuerung möchte, die erreicht werden kann, indem softtabstop auf einen anderen Wert als tabstop gesetzt wird. Es wäre immer noch nützlich sein , für mich in der Lage sein zu setzen tabstop
, softtabstop
und shiftwidth
auf den gleichen Wert mit einem einzigen Befehl.
Macht expandtab softtabstop überflüssig?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
Im Einfügemodus werden durch Drücken der Tabulatortaste 4 Leerzeichen eingefügt. Durch Drücken der Löschtaste wird ein einzelnes Leerzeichen gelöscht. Sie müssen also viermal die Rücktaste drücken, wenn Sie versehentlich die Tabulatortaste drücken.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
Im Einfügemodus werden durch Drücken der Tabulatortaste 4 Leerzeichen eingefügt. Durch Drücken der Rücktaste werden 4 Leerzeichen gelöscht.
Wenn ich mit expandtab
eingeschaltet arbeite , würde ich es vorziehen, wenn die Löschtaste die gleiche Menge an Leerzeichen entfernt, die die Tabulatortaste einfügt. Also in diesem Fall, auch, ich glaube , dass es nützlich wäre , in der Lage sein den gleichen Wert zuweisen tabstop
, softtabstop
und shiftwidth
gleichzeitig.
Eine Verknüpfung wäre immer noch nützlich
Es ist großartig, dass Vim so viel Flexibilität bietet, aber ich kann mir nicht vorstellen, dass ich es brauche. Ich möchte nur die Breite einer Registerkarte auswählen können und ob es sich um eine "harte" Registerkarte (mit einem Tabulatorzeichen) oder eine "weiche" Registerkarte (bestehend aus Leerzeichen) handelt. Das Umschalten zwischen harten und weichen Registerkarten ist einfach genug ( :set expandtab!
), aber ich wünschte, es wäre einfacher, die Breite der Registerkarten festzulegen, ohne mit 3 verschiedenen Parametern herumspielen zu müssen.
Mein vorgeschlagener Vorschlag für so etwas :set stab=4
klingt für mich immer noch gut.
is there a practical case where you wouldn't want shiftwidth == tabstop && tabstop == softtabstop?
eigener Quellcode set shiftwidth=4 tabstop=8 noexpandtab
. Ja, man möchte normalerweise shiftwidth == softtabstop
, aber das ist unabhängig davon, welchen Wert es tabstop
hat.