Was macht "Filetype Plugin on" wirklich?

11

Ich verstehe, dass es die ftplugin.vimDatei lädt , aber was macht es wirklich? Setzt es Optionen (abhängig vom Dateityp)?

Wenn ich diese Zeile am Anfang meines vimrc einfügen würde

filetype plugin indent on

und dann habe ich nach dieser Zeile einige Optionen festgelegt (wie Autoindent, Smartindent usw.). Würde es sie durcheinander bringen? Wie kann ich wissen, welche Optionen von einem Dateityp-Plugin oder einer Einrückungsdatei betroffen sind?

Gradient
quelle

Antworten:

7

Es gibt tatsächlich eine gute Beschreibung in help filetype.

Alle Optionen, die für einen Dateityp definiert sind, werden festgelegt mit setlocal:

:setl[ocal] ...     Like ":set" but set only the value local to the
                    current buffer or window.  Not all options have [..]

Zum Beispiel /usr/share/vim/vim80/ftplugin/javascript.vimdefiniert:

setlocal commentstring=//%s

Da lokale Optionen Vorrang vor globalen haben, werden Ihre .vimrcEinstellungen möglicherweise ignoriert. In diesem Fall müssen Sie eine Datei erstellen ~/.vim/after/ftplugin/javascript.vim(mit dem Namen des Dateityps, den Sie ändern möchten) und dort Ihre eigenen setlocalOptionen festlegen .

Der einfachste Weg , um zu sehen , welche Optionen gesetzt ist, nur die Dateien öffnen für den Dateityp in /usr/share/vim/vim80/ftplugin, ../indentund ../syntax.

Laktak
quelle
1
E492: Kein Editor-Befehl: Plugin ein [gleich für Einzug ein]
Tony
Der letzte Satz dieser Antwort ist falsch. filetype plugin onund filetype indent onsind zwar separate Befehle, aber beide können kombiniert werden, um zu ergeben filetype plugin indent on.
Ruslan
@ Ruslan danke, ich habe diesen Satz entfernt.
Laktak
2

Es definiert Autobefehle, die ausgeführt werden, wenn eine Datei geöffnet wird, die einem bestimmten Muster entspricht. Diese automatischen Befehle sourcewiederum die Dateityp - Plugin s im Zusammenhang mit dem Dateityp erkannt.

In diesen Dateityp-Plugin-Skripten können Sie alles finden / schreiben, was Sie in ein vim-Skript einfügen können. Die gute Praxis besteht darin, niemals globale Dinge zu definieren, sondern ausschließlich lokale Dinge. dh:

  • lokale Optionen mit :setlocal opt=value
  • lokale Zuordnungen mit :[cnivsxot](nore)map <buffer> ...
  • lokale Abkürzungen mit :iab-<buffer> ...& co
  • lokale Befehle mit :command -b ...
  • lokale Variablen mit :let b:var = 42

Bezüglich

  • Menüs, Sie müssen Plugins verwenden, die lokale Menüs emulieren, siehe Michael Geddes 'Plugin oder meine modernisierte Gabel ;
  • Funktionen können Sie sie in ftplugins einfügen, aber sie werden am besten in Autoload-Plugins definiert.
Luc Hermitte
quelle