Wie kann ich den Standardeinzug basierend auf dem Dateityp ändern?

34

Ich hätte gerne verschiedene Einrückungen, basierend auf dem Dateityp, an dem ich arbeite. Wenn Sie beispielsweise an einer .cDatei arbeiten, möchte ich, dass mein Einzug 4 Leerzeichen enthält. In .htmlDateien möchte (muss) ich mit Tabs arbeiten.

Wie erreiche ich das?

DeltaLima
quelle

Antworten:

25

Die beste Methode ist, diese Einstellungen vorzunehmen ~/.vim/after/ftplugin/<filetype>.vim.

Für HTML (vorausgesetzt, Sie möchten 4 Zeichen breite Tabs):

~/.vim/after/ftplugin/html.vim

setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab

Die Verwendung eines FTP-Plugins wird der Verwendung von Autobefehlen vorgezogen, da Vim bereits Dateitypprüfungen selbst durchführt und bereits versucht, das entsprechende FTP-Plugin zu finden, sodass es keinen Grund gibt, noch mehr Prüfungen zu erzwingen und das Rad erneut zu implementieren.

- bearbeiten -

Angenommen, Sie haben filetype plugin onin Ihrem vimrc- was Sie sollten - Vim versucht, den Dateityp der von Ihnen bearbeiteten Dateien zu ermitteln. Sobald der richtige Dateityp gefunden und für den Puffer festgelegt wurde, versuchen Sie, das entsprechende ftplugin an folgenden Standardpositionen zu finden:

$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim

All dies geschieht automatisch . Wenn Ihr Dateityp von Vim erkannt wird, gibt es absolut keinen Grund, eine Dateityp-Erkennungslogik hinzuzufügen: Fügen Sie einfach Ihre Einstellungen zum richtigen ftplugin hinzu, und Sie sind gut.

romainl
quelle
Muss ich das ftplugin irgendwie aktivieren oder wird es durch das Erstellen der Datei (en) automatisch aktiviert?
DeltaLima
Stellen Sie sicher, dass Sie filetype plugin indent onin Ihrem haben vimrc.
Romainl
1
@ DeltaLima vim hat einen Pfad, über den nach Einstellungen gesucht wird. Solange filetype plugin onfestgelegt, enthält der Pfad von vim die Dateien ftplugin/<filetype>.vimund after/ftplugin/<filetype>/vimin seinem Pfad.
Davidlowryduda
@ DeltaLima, siehe bitte meine bearbeiten.
Romainl
14

Sie können dies mit Autobefehlen in Ihrem tun .vimrc.

Zum Beispiel habe ich eine Funktion html_like_mode, die verschiedene Dinge zum Bearbeiten von HTML-Dateien einrichtet. In meinem habe .vimrcich:

au BufNewFile,BufRead *.html call s:html_like_mode()

Das schaltet die Dateierweiterung ab. Sie können den Dateityp auch deaktivieren, wenn Sie dies aktiviert haben:

au FileType perl setlocal equalprg=perltidy

Wie Sie sehen, kann es dort jeden Befehl ausführen. Sie können also problemlos eine setlocal shiftwidth 4für Ihre * .c-Dateien erstellen.

derobert
quelle
9

augroupErmöglicht es Ihnen, verwandte Autobefehle in benannte Gruppen zu gruppieren. (Siehe hier über automatische Befehl Gruppen zu lernen.) Wir verwenden augroups automatischen Befehle hinzuzufügen ~/.vimrcin einer Weise , dass ein jedes Mal , nicht hinzufügen dupliziert wir es beziehen.

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4
shawndumas
quelle
2
Es wäre nützlich, wenn Sie erklären würden, was dies tut und wie es eingerichtet wird, nicht jeder wird es wissen;)
Seth
3

Verwendet autocmd und FileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
Avelino
quelle