Saya baru-baru ini mengajukan pertanyaan di mana saya belajar bahwa tidak mungkin untuk melewatkan apa pun kecuali parameter ke :set
dalam modelm vim. Saya memahami masalah keamanan, tetapi saya bertanya-tanya apakah tidak ada cara lain untuk mengatasi ini. Sebuah pertanyaan baru - baru ini tentang SO tentang pengaturan sejumlah besar parameter untuk memenuhi standar pengkodean membuat saya berpikir — apakah mungkin untuk mendefinisikan "grup" hal-hal dalam file rc saya yang dapat dihidupkan atau dimatikan dari modeline?
Maafkan kode pseudo, tetapi apakah ada cara untuk membuat fungsi yang dipicu dari parameter yang ditetapkan?
set_function! codestyle()
if &1 == 'psr-2'
set ts=4
set sw=4
endfi
if &1 == 'drupal7'
set ts=2
set sw=2
iab D8 Drupal 8
endif
endset_function
Ini kemudian dapat dipicu oleh seorang modeline seperti
# vim: codestyle=psr-2
Ini dalam beberapa hal akan mirip dengan pencocokan jenis file, tetapi memungkinkan penggantian manual. Itu juga akan mengatur lingkungan dengan cara lain yang telah ditentukan, menghindari masalah keamanan memiliki file menjalankan perintah sewenang-wenang lainnya di vim tetapi memungkinkan lingkungan yang lebih khusus. Apakah ada cara untuk melakukan ini?
set
; AFAIK, ini tidak mungkin di Vim ...Jawaban:
Anda punya beberapa pilihan.
Yang pertama: Anda dapat menulis dekoder modeline sendiri, yaitu sebuah plugin. Ini adalah jawaban yang sangat mirip dengan jawaban yang saya berikan pada pertanyaan Anda yang lain.
Memang, kami tidak dapat menambahkan opsi vim baru (yang dapat diatur dengan
:set
), tetapi kami dapat menambahkan variabel baru. Dan kita tidak dapat menggunakan modelines standar untuk melakukan lebih dari pengaturan opsi vim.Kemungkinan kedua: biarkan-modeline dapat dieksploitasi melalui fitur callback untuk memanggil satu fungsi atau lainnya. Anda dapat memiliki
CodeStyle()
fungsi di.vimrc
plugin Anda atau (autoload?), Lalu minta file Anda berisi:Tetapi jika kebutuhan Anda tepat dan jika Anda benar-benar tidak ingin plugin seperti local_vimrc , tulislah dekoder seperti modeline Anda sendiri.
, Dan IMO, pilihan ketiga yang lebih baik dalam kasus itu akan menentukan filetype baru dan set
'ft'
ke filetype ini di modelines dengan:# vim: set ft=php.psr2
. Denganphp
menjadi tipe file global biasa (saya tidak yakin tentang yang ini), danpsr2
menjadi tipe file khusus yang akan sesuai dengan gaya pengkodean Anda. Anda harus mendefinisikan dua ftplugins: ftplugin / psr2.vim dan dan ftplugin / drupal7.vim di mana Anda akan melakukan panggilan:setlocal
(dan tidak:set
).sumber