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?



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

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) .

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.


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 

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.