Cara melihat apakah plugin aktif

15

Bagaimana saya bisa menentukan apakah plugin tipe file (seperti vim-latexsuite) telah diinstal dan diaktifkan ketika saya membuka file yang sesuai? Editor populer lainnya akan menunjukkan bahwa "mode minor" yang relevan aktif. Apa yang setara dengan vim?

SabreWolfy
sumber

Jawaban:

20

Bagaimana saya bisa menentukan apakah plugin tipe file (seperti vim-latexsuite) telah diinstal

Anda dapat menggunakan :scriptnamesdaftar semua file yang bersumber.

Pilihan lain adalah memeriksa variabel yang menunjukkan apakah plugin telah dimuat, seperti apa adanya recommended practice to allow the user to disable the loading of a given plugin.. Anda biasanya dapat menemukan g:loaded_...variabel di dalam <plugin_name>/pluginfolder. Untuk plugin yang Anda sebutkan dapat Anda gunakan echo exists("loaded_libList").

dan diaktifkan ketika saya membuka file yang sesuai?

Jika itu adalah plugin tipe file itu harus diaktifkan secara otomatis ketika 'filetype'opsi diatur. Anda dapat memeriksa apakah opsi sudah benar untuk buffer saat ini:

:set filetype?

Editor populer lainnya akan menunjukkan bahwa "mode minor" yang relevan aktif. Apa yang setara dengan vim?

Anda dapat menyesuaikan garis status Anda untuk menunjukkan indikasi seperti itu, baik menggunakan plugin atau langsung melalui opsi, seperti yang dijelaskan dalam :help 'statusline'dan di vi-improved.org .

mMontu
sumber
6

Plugin Vim tidak disertai dengan indikasi aktivasi, dan dalam pengaturan yang tepat, ini tidak perlu.

Anda dapat dengan cepat memeriksa apakah sebuah plugin aktif dengan menanyakan efek sampingnya, biasanya pemetaan. Jadi, misalnya, saya tahu bahwa pemetaan NERDCommenter mulai dengan <Leader>c, jadi permintaan untuk aktivasi akan :nmap <Leader>c. Jika pemetaan terdaftar, plugin aktif. Hal yang sama dapat dicapai untuk perintah khusus dan :autocmddi grup plugin. Sebagian besar plugin juga menentukan variabel penjaga inklusi g:loaded_pluginnameyang dapat diperiksa.

Hal yang sama berlaku untuk plug-in filetype (dan semua efeknya harus di-buffer-scoped). Faktor paling penting dalam menentukan plugin aktif adalah deteksi filetype yang benar. Anda dapat menanyakannya melalui :setlocal filetype?, atau bahkan memasukkannya 'statusline'melalui %y/ %Yitem.

Ingo Karkat
sumber
6

Dalam kasus khusus itu, saya hanya bermain dengan :scriptnames. Kita tidak dapat berharap untuk menggunakan variabel global untuk memeriksa apakah plugin ft telah dimuat - LaTeXSuite mungkin memiliki plugin, saya tidak ingat, yang pasti adalah bahwa ada banyak skrip ftplugin. Banyak ftplugin menggunakan b:did_ftplugin(yang dikirimkan dengan Vim setidaknya), tetapi pendekatan ini jelas tidak skala: akibatnya, tidak semua ftplugin menggunakan variabel tak berguna ini, dan kami tidak dapat memeriksa nama variabel generik untuk mengetahui apakah ftplugin tertentu memiliki telah dimuat - misalnya, untuk C saja saya punya 22 ftplugins, mereka pasti tidak menggunakan penjaga anti-reinklusi yang sama.

Jadi :scriptname. Alas :scriptnamememberikan banyak hasil yang tidak teratur, bagi mata manusia kita. Untungnya execute()(fungsi yang sangat baru), dan filter()datang untuk menyelamatkan. Dalam hal ini, saya akan mencari skrip vim terkait lateks dengan

:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"') 
" or even "latex" instead of "tex"

Juga jika Anda menggunakan pengelola plugin, kemungkinan pengelola plugin menggunakan 'runtimepath'opsi. Anda dapat menampilkan nilainya dengan :echo &rtp. Anda bahkan dapat memfilter nilainya dengan:

:echo filter(split(&rtp), ','), 'v:val =~? "tex")

(Ini akan memberi tahu Anda apakah pengelola plugin Anda telah mengaktifkan plugin Anda, LaTeX-suite dalam kasus Anda. Ini tidak akan memberi tahu Anda apakah ftplugins terkait telah dimuat dengan benar. :scriptnameAkan memberikan informasi ini kepada Anda.)

Luc Hermitte
sumber
3

Jika Anda mengaktifkan plugin tipe file dengan perintah otomatis, Anda dapat mengatur verbose = 9 sehingga Vim mengulang perintah autocommand saat menjalankannya:

:set verbose=9
qingchen
sumber
3

Salah satu caranya adalah dengan melakukan pencarian regex pada runtimepath:

if match(&runtimepath, 'MY-PLUGIN') != -1
    " ...
endif

Jika Anda menggunakan vim-plug , inilah metode tujuan umum untuk memeriksa:

function! PlugLoaded(name)
    return (
        \ has_key(g:plugs, a:name) &&
        \ isdirectory(g:plugs[a:name].dir) &&
        \ stridx(&rtp, g:plugs[a:name].dir) >= 0)
endfunction

Pemakaian:

if PlugLoaded('MY-PLUGIN')
    " ...
endif
Mateen Ulhaq
sumber
Itu tidak cukup. Selain itu, hanya mengurus plugin yang diinstal dengan pengelola plugin. Dalam semua kasus, itu tidak menangani skrip ftplugin yang dikirimkan dalam plugin, yang merupakan pertanyaan OP.
Luc Hermitte
0

Jika Anda menggunakan vim-plug , itu menetapkan variabel yang disebut plugsyang mencantumkan semua plugin yang dimuat, dan beberapa informasi tentang mereka. Saya memecahkan pertanyaan Anda sendiri ketika saya perlu memeriksa apakah saya menjalankan YCM atau coc.nvim. Anda dapat melihat apakah plugin dimuat dengan menjalankan has_key(plugs, "name"), misalnya:

if has_key(plugs, 'YouCompleteMe')
        call YCM()
endif
if has_key(plugs, "coc.nvim")
        call CocStart()
endif

Catatan: ini hanya menunjukkan jika saat ini terdaftar di Anda vimrc, dan tidak, misalnya, jika Anda mengaturnya untuk memuat malas, jadi

    Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
    ...
if has_key(plugs, 'nerdtree')
        echo "HAS NERDTREE"
endif

masih akan mencetaknya saat startup, meskipun nerdtreebelum dimuat.

Max Coplan
sumber