Apa yang sebenarnya dilakukan oleh "plugin tipe file"?

11

Saya mengerti bahwa ini memuat ftplugin.vimfile, tetapi apa fungsinya? Apakah itu mengatur opsi (tergantung pada jenis file)?

Jika saya harus memasukkan baris ini di awal vimrc saya

filetype plugin indent on

dan kemudian saya menetapkan beberapa opsi setelah baris ini (seperti autoindent, smartindent, dll.), apakah akan mengacaukannya? Bagaimana saya bisa tahu opsi mana yang dipengaruhi oleh plugin tipe file atau file indent?

Gradien
sumber

Jawaban:

7

Sebenarnya ada deskripsi yang bagus di help filetype.

Opsi apa pun yang ditentukan untuk jenis file akan ditetapkan dengan setlocal:

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

Misalnya /usr/share/vim/vim80/ftplugin/javascript.vimmendefinisikan:

setlocal commentstring=//%s

Karena opsi lokal memiliki prioritas daripada yang global, .vimrcpengaturan Anda mungkin diabaikan. Dalam hal ini Anda perlu membuat file ~/.vim/after/ftplugin/javascript.vim(dengan nama tipe file yang ingin Anda ubah) dan mengatur setlocalopsi Anda sendiri di sana.

Cara termudah untuk melihat opsi mana yang ditetapkan adalah dengan hanya membuka file untuk jenis file /usr/share/vim/vim80/ftplugin, ../indentdan ../syntax.

laktak
sumber
1
E492: Bukan perintah editor: plugin aktif [sama untuk indentasi]
Tony
Kalimat terakhir dari jawaban ini salah. filetype plugin ondan filetype indent onmemang perintah yang terpisah, tetapi keduanya dapat digabungkan untuk menghasilkan filetype plugin indent on.
Ruslan
@Ruslan terima kasih, saya menghapus kalimat itu.
laktak
2

Ini mendefinisikan perintah otomatis yang akan dieksekusi ketika file yang cocok dengan pola yang diberikan dibuka. Autocommands ini sourcepada gilirannya filetype Plugin s terkait dengan filetype diakui.

Dalam skrip plugin jenis file itu, Anda akan dapat menemukan / menulis apa pun yang dapat Anda masukkan ke dalam skrip vim. Praktik yang baik adalah tidak pernah mendefinisikan hal-hal global, tetapi hanya hal-hal lokal. yaitu:

  • opsi lokal dengan :setlocal opt=value
  • pemetaan lokal dengan :[cnivsxot](nore)map <buffer> ...
  • singkatan lokal dengan :iab-<buffer> ...& co
  • perintah lokal dengan :command -b ...
  • variabel lokal dengan :let b:var = 42

Mengenai

  • menu, Anda harus menggunakan plugin yang meniru menu lokal, lihat plugin Michael Geddes 'atau garpu modern saya ;
  • fungsi, Anda dapat menempatkan mereka di ftplugins, tetapi mereka terbaik didefinisikan dalam plugin autoload.
Luc Hermitte
sumber