Ich habe mich entschieden, meine Tabulatorgröße von 4 auf 2 zu ändern, weil, warum nicht? Jeder andere, der sich den Code ansehen möchte, kann sicherlich seine Präferenzen verwenden.
Dennoch eine Frage.
Wenn ich die Tabulatortaste drücke, wird 2 eingefügt, aber die automatische Einrückung von Vim fügt immer noch 4 ein. Was muss ich ändern, damit es 2 werden?
Eine weitere, nicht damit zusammenhängende Frage: Welcher Einrückungsstil ist für C und ähnliche Sprachen am besten geeignet? Ich habe 1TBS verwendet, aber es gibt so viele zur Auswahl. Ist einer davon professioneller oder wird er bevorzugt?
Antwort1
Versuchen Sie, ' shiftwidth
' auf den gleichen Wert wie ' tabstop
' zu setzen. Besser noch: Wenn Sie eine aktuelle Version von Vim verwenden, setzen Sie ' shiftwidth
' auf 0 und es wird standardmäßig der Wert verwendet, der für ' tabstop
' eingestellt ist.
Antwort2
Vim-Einrückungsoptionen
Vim verwendet hauptsächlich 3 Einstellungen für die Einrückungsgröße:
tabstop
,ts
: Wenn Vim in einer Datei, die Sie öffnen, auf eine Tabulatorzeichen stößt, zeigt es die Tabulatoren als {ts} Leerzeichen an (sieheTabstop-Hilfe, oder geben Sie:help tabstop
Vim ein).softtabstop
,sts
: wenn Sie eine Datei bearbeiten und die Tabulatortaste drücken, verwendet Vim diese Einstellung, um die Breite der eingefügten Tabulatoren zu definieren (sieheSofttabstop-Hilfe, oder geben Sie:help softtabstop
Vim ein).shiftwidth
,sw
: die Anzahl der Leerzeichen, die Vim beim Einrücken verwendet, entweder mit Autoindent-Zeug oder den üblichen>>
,<<
-Befehlen. Wie Heptite bemerkt hat, ist dies das, wonach Sie in diesem speziellen Fall gesucht haben. Und neuere Versionen von Vim erlauben es Ihnen tatsächlich, diese Option nicht zu definieren,shiftwidth
würde dann den durch definierten Wert annehmentabstop
. Ziemlich praktisch (sieheShiftwidth-Hilfe).
Beispiel
Wenn Sie beispielsweise die folgenden Einstellungen verwenden:
set sts=4
set ts=2
set sw=8
Diese würden das folgende Verhalten erzeugen:
- Das Einfügen einer Tabellierung in die Datei würde einen 4 Leerzeichen breiten Einzug erzeugen.
- Da Ihr
tabstop
Wert auf 2 eingestellt ist, entspricht dies tatsächlich 2 Tabellierungen. Dies lässt sich relativ einfach überprüfen. Verwenden Sie einfach die Optionenlist
undlistchars
zum Anzeigen von Tabellierungen. - Wenn Sie eine Zeile mithilfe von einrücken
>>
, ist die Einrückung 8 Leerzeichen breit (entspricht also 4 Tabellierungen, basierend auftabstop
dem Wert, wie oben).
Vim-Einrückungsempfehlungen (aus der Vim-Dokumentation)
Aus tabstop
der Hilfe ( :help tabstop
in Vim):
There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
(or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim
will use a mix of tabs and spaces, but typing <Tab> and <BS> will
behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
'expandtab'. This way you will always insert spaces. The
formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
|modeline| to set these values when editing the file again. Only
works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
'noexpandtab'. This should then work (for initial indents only)
for any tabstop setting that people use. It might be nice to have
tabs after the first non-blank inserted as spaces if you do this
though. Otherwise aligned comments will be wrong when 'tabstop' is
changed.
Ich persönlich verwende hauptsächlich die zweite Lösung mit 2 Leerzeichen breiten Tabulatoren.
set ts=2
set sts=2
set et "expand tabs to spaces
Antwort3
Entsprechendhttp://vim.wikia.com/wiki/Indenting_source_code, der Befehl „filetype plugin indent on“ bewirkt, dass das Programm dateitypspezifische Einrückungsskripte verwendet, die sich im Unterverzeichnis „indent“ der Vim-Installation befinden. Auf dieser Seite steht auch, dass „cindent“ in C- und C++-Dateien automatisch verwendet wird und dass Sie diesen Befehl nicht manuell verwenden müssen.
Ich bin mit Vim nicht sehr vertraut, da ich es nur gelegentlich für grundlegende Textbearbeitung verwende, aber ich würde versuchen, den Befehl „cindent“ manuell einzugeben, um Vims standardmäßige automatische Einrückungsgröße für diesen Code zu verwenden. Wenn das nicht funktioniert, können Sie „filetype plugin indent on“ ausprobieren und die Skripte selbst bearbeiten, um die gewünschten Einrückungen zu erhalten.