Come vedere se un plugin è attivo


15

Come posso determinare se un plugin di tipo di file (come vim-latexsuite) è stato installato e attivato quando apro il file appropriato? Un altro editor popolare indicherebbe che è attiva la "modalità secondaria" pertinente. Qual è l'equivalente vim?

Risposte:


20

Come posso determinare se è stato installato un plug-in di tipo di file (come vim-latexsuite)

È possibile utilizzare :scriptnamesquale elenco di tutti i file di origine.

Un'altra opzione è quella di verificare la variabile che indica se il plugin è stato caricato, così com'è recommended practice to allow the user to disable the loading of a given plugin.. Di solito puoi trovare le g:loaded_...variabili all'interno della <plugin_name>/plugincartella. Per il plugin che hai citato potresti usare echo exists("loaded_libList").

e attivato quando apro il file appropriato?

Se si tratta di un plug-in di tipo di file, dovrebbe essere attivato automaticamente quando l' 'filetype'opzione è impostata. È possibile verificare se l'opzione è corretta per il buffer corrente:

:set filetype?

Un altro editor popolare indicherebbe che è attiva la "modalità secondaria" pertinente. Qual è l'equivalente vim?

Puoi personalizzare la tua statusline per mostrare tale indicazione, sia usando i plugin che direttamente attraverso le opzioni, come spiegato in :help 'statusline'e su vi-improved.org .


6

I plug-in Vim non vengono forniti con alcuna indicazione di attivazione e, in una configurazione corretta, questo non è necessario.

Puoi verificare rapidamente se un plug-in è attivo eseguendo una query per i suoi effetti collaterali, in genere i mapping. Quindi, ad esempio, so che i mapping di NERDCommenter iniziano con <Leader>c, quindi sarebbe una query per la sua attivazione :nmap <Leader>c. Se i mapping sono elencati, il plug-in è attivo. Lo stesso può essere ottenuto per comandi personalizzati e :autocmdnel gruppo del plugin. La maggior parte dei plugin definisce anche una variabile di protezione dell'inclusione g:loaded_pluginnameche può essere verificata.

Lo stesso vale per i plugin del tipo di file (e gli effetti dovrebbero quindi essere tutti con ambito buffer). Il fattore più importante nel determinare i plugin attivi è il corretto rilevamento del tipo di file. Puoi interrogarlo tramite :setlocal filetype?, o anche metterlo nel tuo 'statusline'tramite l' elemento %y/ %Y.


6

In quel caso particolare, avrei solo giocato :scriptnames. Non possiamo aspettarci di usare una variabile globale per verificare se è stato caricato un plug-in ft - LaTeXSuite potrebbe avere plug-in, non ricordo, ciò che è certo è che ha molti script ftplugin. Molti ftplugin usano b:did_ftplugin(almeno quelli forniti con Vim), ma questo approccio sicuramente non si ridimensiona: di conseguenza, non tutti i ftplugin usano questa variabile inutile e non possiamo verificare un nome di variabile generico per sapere se un determinato ftplugin ha stato caricato - per esempio, solo per C ho 22 ft plug, non stanno usando la stessa protezione antiinclusione.

Così :scriptname. Ahimè :scriptnamedà molti risultati non ordinati, per i nostri occhi umani. Fortunatamente execute()(una funzione molto recente), e filter()vieni in soccorso. In tal caso, vorrei cercare script vim relativi al lattice con

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

Inoltre, se si utilizza un gestore plug-in, è probabile che il gestore plug-in stia utilizzando l' 'runtimepath'opzione. È possibile visualizzare il suo valore con :echo &rtp. Puoi anche filtrare il suo valore con:

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

(Questo ti dirà se il tuo gestore plugin ha attivato il tuo plugin, suite LaTeX nel tuo caso. Questo non ti dirà se i relativi plugin sono stati caricati correttamente. :scriptnameTi fornirà queste informazioni.)


3

Se attivi i plug-in dei tipi di file con i autocomandi, puoi impostare verbose = 9 in modo che Vim faccia eco agli autocomandi mentre li esegue:

:set verbose=9

3

Un modo è fare una ricerca regex su runtimepath:

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

Se stai usando vim-plug , ecco un metodo generico per verificare:

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

Uso:

if PlugLoaded('MY-PLUGIN')
    " ...
endif

Non è abbastanza. Inoltre, si occupa solo dei plugin installati con i gestori dei plugin. In ogni caso, non si occupa degli script ftplugin forniti all'interno dei plugin, che era una domanda di OP.
Luc Hermitte,

0

Se usi vim-plug , imposta una variabile chiamata plugsche elenca tutti i plugin caricati e alcune informazioni su di essi. Ho risolto la tua domanda per me stesso quando avevo bisogno di verificare se stavo eseguendo YCM o coc.nvim. Puoi vedere se un plugin è caricato eseguendo has_key(plugs, "name"), ad esempio:

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

Nota: questo mostra solo se è attualmente elencato nel tuo vimrce non, ad esempio, se lo hai impostato su Lazy Load, quindi

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

lo stampa comunque all'avvio, anche se nerdtreenon è stato ancora caricato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.