O que o “tipo de arquivo plugin on” realmente faz?

11

Entendo que ele carrega o ftplugin.vimarquivo, mas o que ele realmente faz? Ele define opções (dependendo do tipo de arquivo)?

Se eu incluísse esta linha no início do meu vimrc

filetype plugin indent on

e depois defino algumas opções após essa linha (como autoindent, smartindent etc.), isso interferiria com eles? Como posso saber quais opções são afetadas por um plug-in de tipo de arquivo ou arquivo de indentação?

Gradiente
fonte

Respostas:

7

Na verdade, há uma boa descrição no help filetype.

Quaisquer opções definidas para um tipo de arquivo serão definidas com setlocal:

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

Por exemplo, /usr/share/vim/vim80/ftplugin/javascript.vimdefine:

setlocal commentstring=//%s

Como as opções locais têm prioridade sobre as globais, suas .vimrcconfigurações podem ser ignoradas. Nesse caso, você precisa criar um arquivo ~/.vim/after/ftplugin/javascript.vim(com o nome do tipo de arquivo que deseja alterar) e definir suas próprias setlocalopções.

A maneira mais fácil de ver quais opções estão definidas é apenas abrir os arquivos para o tipo de arquivo em /usr/share/vim/vim80/ftplugin, ../indente ../syntax.

Laktak
fonte
1
E492: Não um comando editor: plugin em [mesmo para travessão on]
Tony
A última frase desta resposta está errada. filetype plugin one filetype indent onsão de fato comandos separados, mas ambos podem ser combinados para render filetype plugin indent on.
Ruslan #
@Ruslan obrigado, eu removi essa frase.
Laktak 01/10/19
2

Ele define comandos automáticos que serão executados quando um arquivo correspondente a um determinado padrão for aberto. Estes autocomandos sourcepor sua vez o filetype plugin de s associado ao tipo de arquivo reconhecido.

Nesses scripts de plug-in de tipo de arquivo, você poderá encontrar / escrever qualquer coisa que possa colocar em um script vim. A boa prática é nunca definir coisas globais, mas exclusivamente coisas locais. ou seja:

  • opções locais com :setlocal opt=value
  • mapeamentos locais com :[cnivsxot](nore)map <buffer> ...
  • abreviações locais com :iab-<buffer> ...& co
  • comandos locais com :command -b ...
  • variáveis ​​locais com :let b:var = 42

A respeito de

  • menus, você terá que usar plug-ins que simulam menus locais, consulte o plug-in de Michael Geddes ou meu fork modernizado ;
  • funções, você pode colocá-los em ftplugins, mas eles são melhor definidos em plugins de carregamento automático.
Luc Hermitte
fonte