Festlegen der Vim-Leerzeicheneinstellungen nach Dateityp

155

Bei meiner Arbeit muss ich zum Einrücken dem Hausstil folgen, der wie folgt lautet:

  • 2 Leerzeichen beim Codieren von HTML und Ruby
  • Tabs beim Codieren von Javascript, mit Tabwidth = 4 empfohlen

Was ist der beste Weg, um unterschiedliche Whitespace-Einstellungen pro Dateityp anzugeben?

Nelstrom
quelle
Mögliches Duplikat des Verhaltens von Vim-Einrückungen nach Dateityp
ändern
All diese Antworten haben mich nur verwirrter gemacht. Das Problem ist, dass die Optionen den Vorlieben entsprechen. Die akzeptierte Antwort hat jedoch eine schöne Syntax. Dies war ein ausgezeichneter Leitfaden: vimcasts.org/transcripts/2/en
Mikael Lindlöf

Antworten:

245

Es gibt viele Möglichkeiten, aber hier ist eine einfache, leicht verständliche Möglichkeit. Fügen Sie diese Zeilen zu Ihrem hinzu ~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4
Peter
quelle
27
ts = 'Anzahl der Leerzeichen, die <Tab> in der Datei verwendet' sts = 'Anzahl der Leerzeichen, die <Tab> beim Bearbeiten von' sw = 'Anzahl der Leerzeichen für den (automatischen) Einrückungsschritt
zdsbs
Ich musste expandtab zumindest für Ruby anhängen, siehe Antwort von 'too much php' hier
Michael Durrant
87

Peters Antwort ist einfach genug, aber leider sind die Optionen nicht richtig. Sie müssen stattdessen die folgenden Optionen verwenden:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

Beachten Sie auch:

  • Mit können Sie vim Tab-Zeichen anzeigen lassen :set list.
  • Sobald Sie die Tabulator- / Leerzeichenoptionen richtig eingestellt haben, können Sie vim veranlassen, die Datei mit dem :retab!Befehl zu reparieren (Leerzeichen durch Tabulatoren ersetzen oder umgekehrt) .
zu viel php
quelle
2
Was ist der Vorteil von expandtabübersts=2
James McMahon
12
@JamesMcMahon expandtab erweitert alle Registerkarten auf Leerzeichen. sts (softtabstop) fügt Leerzeichen und Tabulatoren für Einrückungen ein: so viele Tabulatoren, wie in den Einzug passen, basierend auf der Größe des Tabstops, und anschließend Leerzeichen. Wenn die Registerkarte "expandtab" aktiviert ist, werden natürlich alle eingefügten Registerkarten in Leerzeichen konvertiert. stackoverflow.com/questions/1562336/… könnte weiter helfen. Ohne Registerkarte erweitern würde Peters Antwort Registerkarten einfügen, die 2 Zeichen breit sind, keine Leerzeichen.
Ajmccluskey
35

+1 auf Peters Antwort, aber Vim bietet auch eine andere Lösung. Wenn Sie etwas Komplizierteres als nur eine einzige setlocalausführen möchten , z. B. eine ganze Reihe von Optionen, Befehlen und Zuordnungen gleichzeitig einrichten möchten, hilft Ihnen die Dateityp-Plugin-Funktion von vim.

Sie müssen filetype plugin onoder filetype plugin indent onin Ihrem .vimrchaben und dann ein Plugin für zB Ruby erstellen, das Sie erstellen können ~/.vim/ftplugin/ruby.vim. Technisch gesehen können Sie alle Befehle verwenden , wie Sie hier, ausgeführt wird , wenn ein Ruby - Datei geladen wird, aber die empfohlenen umfassen setlocal, map <buffer>, command -buffer, und definieren Funktionen. Viele weitere Informationen finden Sie im Benutzerhandbuch. Wenn Sie mit Scripting vim ziemlich vertraut sind, springen Sie zu :help 41.11, lesen Sie andernfalls :help usr_40und :help usr_41.

Hobbs
quelle
10

Es gibt auch ein nettes vim-Skript: DetectIndent, das versucht, den Einzug einer von Ihnen geöffneten Datei zu erkennen. Es ist sehr praktisch, wenn Sie mit vielen Dateien mit unterschiedlichem Codierungsstil arbeiten.

Ich verwende einen automatischen Befehl in meiner .vimrc :

:autocmd BufReadPost * :DetectIndent 
Benedikt Waldvogel
quelle
0

Um Leerzeichen einzufügen, wenn die Tabulatortaste gedrückt wird, setzen Sie die Option 'expandtab':

:set expandtab

Der nächste Schritt besteht darin, die Anzahl der Leerzeichen zu steuern, die beim Drücken der Tabulatortaste eingefügt werden. Setzen Sie die Option "Tabstop". Verwenden Sie beispielsweise Folgendes, um 2 Leerzeichen für eine Registerkarte einzufügen:

:set tabstop=2

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

Bartoindahouse
quelle