¿Qué hace realmente el "complemento de tipo de archivo"?

11

Entiendo que carga el ftplugin.vimarchivo, pero ¿qué hace realmente? ¿Establece opciones (dependiendo del tipo de archivo)?

Si tuviera que incluir esta línea al comienzo de mi vimrc

filetype plugin indent on

y luego configuro algunas opciones después de esta línea (como autoindent, smartindent, etc.), ¿se enredaría con ellas? ¿Cómo puedo saber qué opciones se ven afectadas por un complemento de tipo de archivo o un archivo de sangría?

Degradado
fuente

Respuestas:

7

En realidad hay una buena descripción en help filetype.

Cualquier opción definida para un tipo de archivo se establecerá con setlocal:

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

Por ejemplo /usr/share/vim/vim80/ftplugin/javascript.vimdefine:

setlocal commentstring=//%s

Debido a que las opciones locales tienen prioridad sobre las globales, su .vimrcconfiguración podría ignorarse. En ese caso, debe crear un archivo ~/.vim/after/ftplugin/javascript.vim(con el nombre del tipo de archivo que desea cambiar) y establecer sus propias setlocalopciones allí.

La forma más fácil de ver qué opciones están configuradas es simplemente abrir los archivos para el tipo de archivo /usr/share/vim/vim80/ftplugin, ../indenty ../syntax.

laktak
fuente
1
E492: No es un comando de editor: complemento en [lo mismo para sangría en]
Tony
La última oración de esta respuesta es incorrecta. filetype plugin ony de filetype indent onhecho son comandos separados, pero ambos se pueden combinar para producir filetype plugin indent on.
Ruslan
@Ruslan gracias, eliminé esa frase.
laktak
2

Define los comandos automáticos que se ejecutarán cuando se abra un archivo que coincida con un patrón determinado. Estos autocommands sourcea su vez, el tipo de archivo plug-in s asociado al tipo de archivo reconocido.

En esos scripts de plugin de tipo de archivo, podrá encontrar / escribir cualquier cosa que pueda poner en un script vim. La buena práctica no es nunca definir cosas globales, sino cosas exclusivamente locales. es decir:

  • opciones locales con :setlocal opt=value
  • mapeos locales con :[cnivsxot](nore)map <buffer> ...
  • abreviaturas locales con :iab-<buffer> ...& co
  • comandos locales con :command -b ...
  • variables locales con :let b:var = 42

Respecto a

  • menús, tendrá que usar complementos que emulen menús locales, vea el complemento de Michael Geddes o mi tenedor modernizado ;
  • funciones, puede ponerlas en ftplugins, pero se definen mejor en complementos de carga automática.
Luc Hermitte
fuente