Di saya .vimrc
Saya mencoba menggunakan ftplugin
dan jelas menggunakan beberapa perintah yang berkaitan dengan itu dengan asumsi bahwa itu berhasil dimuat. Namun, saya sekarang menjumpai beberapa mesin lama yang tidak menginstal plugin. Bisakah saya membuat memuat plugin ini bersyarat dan menambahkan filetype on
dan arahan serupa ke dalam blok bersyarat yang sama?
Saya telah melihat ada kondisi untuk skema warna dan versi Vim, tetapi saya belum melihat contoh yang akan memeriksa plugin (atau tidak mengenalinya).
NB: Bersikaplah lembut, saya seorang pemula VimScript.
~/.vimrc
, jadi Anda tidak akan dapat menguji efek dari plugin di dalam Anda~/.vimrc
kecuali jika Anda menguji keberadaan file plugin atau menunda pengujian sampai setelah plugin dimuat dengan perintah otomatis seperti VimEnter.Jawaban:
Anda bisa membungkus blok itu dalam kondisi yang menggunakan
exists()
berfungsi untuk periksa apakah variabel, perintah atau fungsi yang ditentukan oleh plugin diketahui vim.Berikut adalah beberapa bit yang saya miliki di file di bawah ~ / .vim:
Perhatikan bahwa bit di atas ada dalam file yang dievaluasi setelah plugin normal, di sini sebuah ftplugin, dan sebuah file di
after/plugin
direktori.Opsi lain adalah menggunakan blok coba / tangkap, meskipun ini membutuhkan pada paling tidak vim 7.0:
Sekali sesuatu di
try
bagian dari blok itu gagal itu akan melompat kecatch
bagian. Sejakcatch
Bagian kosong, hanya akan melanjutkan dengan sisa file inisialisasi setelahendtry
pernyataan.Karena ini memuat kode secara manual daripada mengandalkan plugin sudah dimuat, ini bisa dilakukan di file .vimrc itu sendiri.
sumber
try
membangun? Akankah Vim lama mengerti ini? Yaitu. kapan diperkenalkan. Terima kasih dan +1 untuk sekarang.try
harus bekerja. Terima kasih banyak. Mari kita lihat apakah jawaban lain masih akan tiba. Kalau tidak, aku tentu saja akan menerima milikmu.:silent! {cmd}
, yang menekan kesalahan saat{cmd}
tidak ada. Ini bahkan berfungsi di Vim 6.Metode pilihan saya adalah hanya untuk memeriksa keberadaan file plugin. Saya menemukan ini lebih sederhana.
sumber
Namun alternatif lain adalah menggunakan
:silent! {cmd}
, yang menekan kesalahan saat{cmd}
tidak ada. Manfaat utama adalah bahwa itu perintah tunggal yang singkat. Ini bahkan berfungsi di Vim 6, dan sangat bagus untuk hal-hal opsional.Misalnya, digunakan oleh plugin yang menggunakan Tim Pope's repeat.vim untuk membuat pemetaan berulang.
sumber
!silent runtime ftplugin/man.vim | filetype on | filetype plugin on | filetype indent on
berfungsi untuk menutup semua perintah berikut!silent
atau apakah itu selalu spesifik untuk perintah selanjutnya?:silent!
tidak!silent
, dan itu berlaku untuk semua perintah yang terkandung, kecuali untuk kapan:unsilent
digunakan di suatu tempat di dalam. (Tapi itu jarang terjadi.)Saya ingin mencapai ini sambil menjaga konfigurasi Vim saya bersama dalam
.vimrc
, daripada dalam banyakafter/
direktori. Ini adalah solusi yang saya buat:Periksa keberadaan setiap plugin dengan memeriksa perintah tunggal yang disediakannya
exists()
, dan atur opsinya jika memang ada. (Ini seperti dalam jawaban yang diterima.)Masukkan semua opsi yang diatur dengan cara di atas dalam suatu fungsi (disebut
SetPluginOptionsNow()
dalam kode saya).Panggil fungsi ini di
VimEnter
acara, yang dipicu saat memasuki sesi Vim baru - tetapi yang terpenting, setelah semua plugin telah dimuat. Karena kenyataan ini, kamiexists()
cek dapat memeriksa fungsi plugin tanpa masalah.Ini contoh dari bagian saya
.vimrc
.sumber
airline_theme
tampaknya menyebabkan banyak kesalahan ... Saya tidak begitu yakin mengapa.Awalnya diposting di pertanyaan lain: https://stackoverflow.com/a/48178537/2843583
Sama seperti alternatif Anda juga dapat menggunakan regexp untuk memutuskan apakah plugin yang ada di tangan Anda
runtimepath
:Ini memiliki keuntungan karena berfungsi dengan plugin yang hanya memiliki kode vimscript di
autoload
direktori, yang pada gilirannya tidak dapat dideteksi ketika .vimrc awalnya diuraikan sejak potongan autoload dimuat pada saat pemanggilan fungsi.sumber