Que fait vraiment le «plugin de type de fichier»?

11

Je comprends qu'il charge le ftplugin.vimfichier, mais que fait-il vraiment? Définit-il des options (selon le type de fichier)?

Si je devais inclure cette ligne au début de mon vimrc

filetype plugin indent on

et puis j'ai défini quelques options après cette ligne (comme autoindent, smartindent, etc.), cela dérangerait-il avec elles? Comment savoir quelles options sont affectées par un plugin de type de fichier ou un fichier de retrait?

Pente
la source

Réponses:

7

Il y a en fait une bonne description dans help filetype.

Toutes les options définies pour un type de fichier seront définies avec setlocal:

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

Par exemple, /usr/share/vim/vim80/ftplugin/javascript.vimdéfinit:

setlocal commentstring=//%s

Étant donné que les options locales ont priorité sur les options globales, vos .vimrcparamètres peuvent être ignorés. Dans ce cas, vous devez créer un fichier ~/.vim/after/ftplugin/javascript.vim(avec le nom du type de fichier que vous souhaitez modifier) ​​et y définir vos propres setlocaloptions.

La façon la plus simple de voir quelles options sont définies consiste à simplement ouvrir les fichiers pour le type de fichier dans /usr/share/vim/vim80/ftplugin, ../indentet ../syntax.

laktak
la source
1
E492: Pas une commande d'éditeur: plugin activé [même pour le retrait]
Tony
La dernière phrase de cette réponse est fausse. filetype plugin onet filetype indent onsont en effet des commandes distinctes, mais les deux peuvent être combinées pour donner filetype plugin indent on.
Ruslan
@Ruslan merci, j'ai supprimé cette phrase.
laktak
2

Il définit les autocommandes qui seront exécutées lorsqu'un fichier correspondant à un modèle donné est ouvert. Ces autocommandes sourcetour à tour le plugin filetype s associé au filetype reconnu.

Dans ces scripts de plugin de type de fichier, vous pourrez trouver / écrire tout ce que vous pouvez mettre dans un script vim. La bonne pratique n'est pas de définir des choses globales, mais exclusivement des choses locales. c'est à dire:

  • options locales avec :setlocal opt=value
  • mappages locaux avec :[cnivsxot](nore)map <buffer> ...
  • abréviations locales avec :iab-<buffer> ...& co
  • commandes locales avec :command -b ...
  • variables locales avec :let b:var = 42

En ce qui concerne

  • menus, vous devrez utiliser des plugins qui émulent les menus locaux, voir le plugin de Michael Geddes ou ma fourche modernisée ;
  • fonctions, vous pouvez les mettre dans des plugins ft, mais ils sont mieux définis dans les plugins de chargement automatique.
Luc Hermitte
la source