Vim-Tab-Größe beim Drücken von <Tab> und wenn die automatische Einrückung angewendet wird

22

Ich habe beschlossen, meine Tab-Größe von 4 auf 2 zu ändern, denn warum nicht? Jeder andere, der sich den Code ansehen möchte, kann sicherlich seine Einstellungen verwenden.

Eine Frage jedoch.

Wenn ich die Tabulatortaste drücke, wird 2 eingefügt, aber Vims Autoindent setzt immer noch 4. Was ändere ich, um diese 2 zu machen?

Eine weitere nicht verwandte Frage: Welcher Einrückungsstil eignet sich am besten für C und ähnliche Sprachen? Ich habe 1 TB verwendet, aber es gibt so viele zur Auswahl. Sind einige von ihnen professioneller oder bevorzugt?

user341814
quelle

Antworten:

17

Versuchen Sie, ' shiftwidth' auf den gleichen Wert wie ' tabstop' einzustellen. Besser noch, wenn Sie eine ausreichend aktuelle Version von Vim verwenden, setzen Sie ' shiftwidth' auf 0 und es wird standardmäßig auf ' tabstop' gesetzt.

Heptit
quelle
Das habe ich gesucht. Derzeit wird zwischen der Einstellung ts2, 4 oder 8
diskutiert
Ich verwende 8 für Nicht-Code-Dateien und entweder 2 oder 4, abhängig von der Sprache und der Häufigkeit der Verschachtelung.
Heptite
Ich mache im Moment nur C.
user341814
33

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 Tabelle stößt, wird die Registerkarte als {ts} Leerzeichen angezeigt (siehe Tabstop-Hilfe oder geben Sie :help tabstopVim ein).
  • softtabstop, sts: Wenn Sie eine Datei bearbeiten und die Tabulatortaste drücken, definiert Vim mit dieser Einstellung die Breite der eingefügten Tabellierung (siehe Softtabstop-Hilfe oder geben Sie :help softtabstopVim ein).
  • shiftwidth, sw: Die Anzahl der Leerzeichen Vim verwendet , wenn einrücken, entweder mit autoindent Sachen oder den üblichen >>, <<Befehlen. Wie Heptite bemerkte, war 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, und shiftwidthwürden dann den durch definierten Wert annehmen tabstop. Sehr praktisch (siehe Shiftwidth-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:

  1. Das Einfügen einer Tabelle in die Datei würde einen Einzug von 4 Leerzeichen erzeugen.
  2. Da Ihr tabstopWert auf 2 gesetzt ist, entspricht dies tatsächlich 2 Tabellen. Dies ist ziemlich einfach zu überprüfen. Verwenden Sie einfach die Optionen listund listchars, um Tabellen anzuzeigen.
  3. Wenn Sie eine Zeile mit einrücken >>, wird die Einrückung 8 Leerzeichen breit (daher entspricht dies 4 Tabellen, basierend auf dem tabstopWert, wie oben).

Geben Sie hier die Bildbeschreibung ein

Empfehlungen für Vim-Einrückungen (aus der Vim-Dokumentation)

Von der tabstopHilfe ( :help tabstopin 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 Tabellen.

set ts=2
set sts=2
set et     "expand tabs to spaces
Pabuisson
quelle
-1

Laut http://vim.wikia.com/wiki/Indenting_source_code bewirkt der Befehl "Einzug des Dateityp-Plugins ein", dass das Programm filettypspezifische Einrückungsskripte verwendet, die sich im Unterverzeichnis "Einzug" der Vim-Installation befinden. Auf dieser Seite wird außerdem angegeben, 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 für gelegentliche grundlegende Textbearbeitungen verwende, aber ich würde versuchen, den Befehl 'cindent' manuell auszugeben, um die Standardgröße für die automatische Indentierung von Vim für diesen Code zu verwenden. Wenn dies nicht funktioniert, können Sie versuchen, den Einzug in das Dateityp-Plugin einzuschalten und die Skripte selbst zu bearbeiten, um die gewünschten Einrückungen zu erhalten.

Kyle
quelle