Wie ändere ich die Tab-Größe in Vim?

171

Jedes Mal, wenn ich einen Selektor in CSS hinzufüge und drücke Enter, um die Eigenschaften zu definieren, endet dies folgendermaßen:

#selector {
        property: value;
}

(Tabulatoren mit 8 Leerzeichen)

Wie kann ich Vim so konfigurieren, dass es so aussieht:

#selector {
    property: value;
}

(4-Leerzeichen)

alexchenco
quelle
4
Möchten Sie eine Registerkarte mit einer Breite von 4 Feldern? Vier Räume? Oder vier Registerkarten mit einer Raumbreite? Das sind verschiedene Dinge, und du bist nicht klar. Beginnen Sie auf jeden Fall mit dem Lesen: er ts ,: er sw, und: er erweitert
abeyer

Antworten:

102

Erweiterung der Antwort von zoul:

Wenn Sie Vim so einrichten möchten, dass beim Bearbeiten eines bestimmten Dateityps bestimmte Einstellungen verwendet werden, sollten Sie automatische Befehle verwenden:

autocmd Filetype css setlocal tabstop=4

Dadurch werden Registerkarten als 4 Leerzeichen angezeigt. Durch die Einstellung expandtabfügt Vim tabstopbeim Drücken der Tabulatortaste tatsächlich Leerzeichen ein (deren Anzahl gesteuert wird ). Möglicherweise möchten Sie verwenden softtabstop, damit die Rücktaste ordnungsgemäß funktioniert (dh die Einrückung reduzieren, wenn dies bei Verwendung von Registerkarten der Fall ist, anstatt immer jeweils ein Zeichen zu löschen).

Um eine vollständig fundierte Entscheidung zu treffen , wie die Dinge einzurichten, werden Sie brauchen Vim docs auf lesen tabstop, shiftwidth, softtabstopund expandtab. Das interessanteste Bit finden Sie unter expandtab( :help 'expandtab):

Es gibt vier Hauptmethoden für die Verwendung von Registerkarten in Vim:

  1. Halten Sie 'tabstop' immer bei 8, setzen Sie 'softtabstop' und 'shiftwidth' auf 4 (oder 3 oder was auch immer Sie bevorzugen) und verwenden Sie 'noexpandtab'. Dann verwendet Vim eine Mischung aus Tabulatoren und Leerzeichen, tippt jedoch und verhält sich so, als würde alle 4 (oder 3) Zeichen ein Tabulator angezeigt.

  2. Stellen Sie 'tabstop' und 'shiftwidth' auf das ein, was Sie bevorzugen, und verwenden Sie 'expandtab'. Auf diese Weise fügen Sie immer Leerzeichen ein. Die Formatierung wird niemals durcheinander gebracht, wenn 'tabstop' geändert wird.

  3. Stellen Sie 'tabstop' und 'shiftwidth' auf das ein, was Sie bevorzugen, und verwenden Sie eine | modeline | um diese Werte beim erneuten Bearbeiten der Datei festzulegen. Funktioniert nur, wenn Sie die Datei mit Vim bearbeiten.

  4. Setzen Sie 'tabstop' und 'shiftwidth' immer auf den gleichen Wert und 'noexpandtab'. Dies sollte dann (nur für anfängliche Einrückungen) für alle Tabstop-Einstellungen funktionieren, die von Personen verwendet werden. Es kann jedoch hilfreich sein, Tabulatoren nach dem ersten nicht leeren Leerzeichen als Leerzeichen einzufügen, wenn Sie dies tun. Andernfalls sind ausgerichtete Kommentare falsch, wenn 'Tabstop' geändert wird.

Michał Marczyk
quelle
Sorgen Sie sich auch nicht zu sehr darum, Ihre Meinung später zu ändern ... siehe :help retab(überprüfen Sie die! -Variante).
Michał Marczyk
Ist die Verwendung von autocmd komplementär zur Verwendung von .vimrc oder eine Alternative?
Josh Desmond
224
:set tabstop=4
:set shiftwidth=4
:set expandtab

Dadurch werden vier Leerzeichen anstelle eines Tabulators eingefügt. Leerzeichen sind etwas „stabiler“, was bedeutet, dass mit Leerzeichen eingerückter Text im Browser und in jeder anderen Anwendung gleich angezeigt wird.

Zoul
quelle
82
Ja, aber Registerkarten sind semantisch (jede Registerkarte bedeutet 1 Einrückungsebene), während Leerzeichen rein präsentativ sind. Mit anderen Worten, wenn Sie Registerkarten verwenden, können andere Personen, die Ihren Code anzeigen, so breit angezeigt werden, wie sie möchten, wohingegen Leerzeichen dies nicht zulassen.
K Prime
11
Beachten Sie, dass Sie, wenn Sie es vorziehen, dass '>' und '<' Ihren Text um dieselbe Entfernung wie die Tabulatortaste bewegen, einfach :set shiftwidth=0in Ihrem vimrc arbeiten und ihn für immer vergessen können, da dies vim mitteilt, dass Sie immer möchten, dass er übereinstimmt tabstop.
Selten needy
132

Verwenden Sie diesen Befehl, um die Änderung für eine Sitzung vorzunehmen:

:set tabstop=4

Um die Änderung dauerhaft zu machen, fügen Sie sie hinzu ~/.vimrcoder ~/.vim/vimrc:

set tabstop=4

Dies betrifft alle Dateien, nicht nur CSS. So beeinflussen Sie nur CSS-Dateien:

autocmd Filetype css setlocal tabstop=4

wie in Michałs Antwort angegeben .

Keith
quelle
2
Wenn die Registerkarte als vier Leerzeichen fungieren soll, müssen die anderen Zeilen in der @ Zoul-Antwort ebenfalls zur .vimrc hinzugefügt werden. Fügen Sie also auch 'set shiftwidth = 4' und 'set expandtab' zur .vimrc hinzu.
Qartal
7
Die Frage lautet: "Wie ändere ich die Tab-Größe in Vim?"
Keith
So würde ich es machen. Und um sicherzustellen, dass ~/.vimrcimmer gesichert wird, speichere ich die Datei normalerweise in meinem Dropbox-Ordner und erstelle dann einen Sym-Link zum Desktop:ln -s /home/myfolder/Dropbox/.vimrc ~
Enchance
41

Einige der Antworten auf dieser Seite sind "Single Use" -Fixes für das beschriebene Problem. Das heißt, wenn Sie das nächste Mal ein Dokument mit vim öffnen, werden die vorherigen Registerkarteneinstellungen zurückgegeben.

Wenn jemand daran interessiert ist, die Registerkarteneinstellungen dauerhaft zu ändern:

  • Hier finden / öffnen Sie Ihre .vimrc - Anleitung
  • Fügen Sie die folgenden Zeilen hinzu: ( weitere Informationen hier )

     set tabstop=4
     set shiftwidth=4
     set expandtab
    
  • Speichern Sie dann die Datei und testen Sie sie

Alexander McNulty
quelle
11
Dadurch werden Leerzeichen und keine Tabulatoren eingefügt.
Supernovah
5
@Supernovah können Sie die "expandtab" entfernen, um Tabs zu bekommen
kommradHomer
27

Als Einzeiler in vim :

:set tabstop=4 shiftwidth=4 expandtab

Fügen Sie für eine dauerhafte Einrichtung diese Zeilen zu ~ / .vimrc hinzu :

set tabstop=4
set shiftwidth=4
set expandtab
oz19
quelle
6

AKTUALISIEREN

Wenn Sie in einem bestimmten Projekt arbeiten, empfehle ich dringend die Verwendung von editorconfig .

Sie können eine .editorconfigDatei im Stammverzeichnis Ihres Repositorys definieren und den Einzug definieren, den Sie für jeden Dateityp in Ihrem Repository verwenden möchten.

Beispielsweise:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Es gibt ein vim-Plugin , das vim automatisch gemäß der Konfigurationsdatei für die von Ihnen geöffnete Datei konfiguriert.

Darüber hinaus wird die .editorconfigDatei von vielen anderen IDEs und Editoren automatisch unterstützt, sodass sie die beste Option für die Zusammenarbeit zwischen Benutzern mit unterschiedlichen Umgebungen ist.

URSPRÜNGLICHE ANTWORT

Wenn Sie die Größe häufig ändern müssen und diese nicht an einen bestimmten Dateityp binden möchten, können Sie vordefinierte Befehle in Ihrer .vimrc-Datei verwenden, um die Einstellungen schnell zu ändern:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

Dadurch werden den Schlüsseln \ t und \ m zwei verschiedene Größengruppen zugeordnet. Sie können dies an beliebige Tasten binden.

Jens
quelle