Co tak naprawdę robi „wtyczka typu pliku”?

11

Rozumiem, że ładuje ftplugin.vimplik, ale co tak naprawdę robi? Czy ustawia opcje (w zależności od rodzaju pliku)?

Gdybym miał dołączyć tę linię na początku mojego vimrc

filetype plugin indent on

a potem ustawiam niektóre opcje po tej linii (np. autoindent, smartindent itp.), czy to by z nimi zadzierało? Skąd mam wiedzieć, na które opcje wpływa wtyczka typu pliku lub plik wcięcia?

Gradient
źródło

Odpowiedzi:

7

W rzeczywistości jest dobry opis help filetype.

Wszelkie opcje zdefiniowane dla typu pliku zostaną ustawione za pomocą setlocal:

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

Na przykład /usr/share/vim/vim80/ftplugin/javascript.vimdefiniuje:

setlocal commentstring=//%s

Ponieważ opcje lokalne mają priorytet nad globalnymi, .vimrcustawienia mogą zostać zignorowane. W takim przypadku musisz utworzyć plik ~/.vim/after/ftplugin/javascript.vim(z nazwą typu pliku, który chcesz zmienić) i ustawić tam własne setlocalopcje.

Najłatwiejszym sposobem sprawdzenia, które opcje są ustawione, jest po prostu otwarcie plików dla typu pliku w /usr/share/vim/vim80/ftplugin, ../indenti ../syntax.

laktak
źródło
1
E492: To nie jest polecenie edytora: wtyczka [ta sama dla wcięcia]
Tony
Ostatnie zdanie tej odpowiedzi jest nieprawidłowe. filetype plugin oni filetype indent onsą rzeczywiście osobnymi poleceniami, ale oba można łączyć, aby uzyskać filetype plugin indent on.
Ruslan
@Ruslan dzięki, usunąłem to zdanie.
laktak
2

Definiuje autopolecenia, które będą wykonywane po otwarciu pliku pasującego do danego wzorca. Te autokomendy sourcez kolei wtyczki filetype s powiązany z typem pliku uznanej.

W tych skryptach wtyczek typu pliku będziesz mógł znaleźć / napisać wszystko, co możesz umieścić w skrypcie vim. Dobrą praktyką nie jest nigdy definiowanie rzeczy globalnych, ale wyłącznie rzeczy lokalne. to znaczy:

  • opcje lokalne z :setlocal opt=value
  • lokalne mapowania z :[cnivsxot](nore)map <buffer> ...
  • lokalne skróty z :iab-<buffer> ...& co
  • lokalne polecenia z :command -b ...
  • zmienne lokalne z :let b:var = 42

Jeżeli chodzi o

  • menu, musisz użyć wtyczek, które emulują lokalne menu, zobacz wtyczkę Michaela Geddesa lub mój zmodernizowany widelec ;
  • funkcji, możesz umieścić je w ftplugins, ale najlepiej zdefiniować je we wtyczkach autoload.
Luc Hermitte
źródło