Come caricare i plugin in modo condizionale


14

Stavo cercando una risposta a questo, ma non ho ancora trovato nulla, quindi se ho perso qualcosa di ovvio, mi scuso. Ho pensato che sarebbe stata una rapida ricerca su Google, quindi forse è più complicato di quanto pensassi.

Mi piacerebbe essere in grado di caricare i plugin in modo condizionale in base al tipo di file che sto modificando. Ad esempio, quando modifico Python, non voglio i keybindings che si vim-sexpinstallano, ma quando lavoro su clojure, voglio che quel plugin venga caricato.

Attualmente sto usando Neovim e Pathogen, ma se c'è un gestore di plugin diverso che lo fa per me, sarei aperto al passaggio. Inoltre, se esiste, :set syntax whatevercambia i plugin? Perché sarebbe super :)

Grazie in anticipo per qualsiasi aiuto / direzione!


1
Stai ponendo una domanda, ma in realtà ne descrivi un'altra: se un plugin installa combinazioni di tasti globali, disabilitalo (leggi i documenti del plugin su come farlo) e riattivalo localmente (usando autocmds per esempio) solo per i tipi di file volere. Se il plugin è ben scritto, non guadagni troppo ritardando la sua inizializzazione. Ma se non disabiliti le combinazioni di tasti globali indesiderate attivate da un plug-in, queste avranno comunque effetto su di te dopo il caricamento del plug-in.
VanLaser,

Risposte:


18

Puoi farlo con Vim-Plug. Vedi il README :

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

Penso che dovrai usare :set filetype whateverinvece di set syntax whateverabilitare il plugin.

(Alcuni altri gestori plug-in potrebbero consentirti di farlo, vedi Qual è la differenza tra i gestori plug-in vim? )


8

Invece di chiamare execute pathogen#infect()per caricare tutti i plugin, chiama pathogen#interposeper ogni plugin, ovvero:

execute pathogen#interpose('bundle/unicode.vim')
execute pathogen#interpose('bundle/AnsiEsc.vim')

L'API patogena non è documentata al di fuori della fonte , ma è abbastanza semplice (anche se i nomi delle funzioni sono oscuri e non descrittivi). È inoltre possibile utilizzare pathogen#surround()per percorsi assoluti.

Puoi caricare i plugin in modo condizionale con un semplice autocmd:

" Always use this plugin
execute pathogen#interpose('bundle/unicode.vim')

" Only for Python
autocmd FileType python execute pathogen#interpose('bundle/vim-sexp')

Se scopri di avere molti di questi casi, potresti persino dividerlo in diversi percorsi:

  • ~/.vim/bundle/always per plugin che vuoi sempre
  • ~/.vim/bundle/<filetype> per plugin per un tipo di file specifico
  • E poi caricalo in questo modo:

    " Always use this plugin
    execute pathogen#infect('bundle/always/{}')
    
    " Load filetype plugins if they exist
    autocmd FileType * if isdirectory('/home/martin/.vim/bundle/' . &ft) | execute pathogen#infect('bundle/' . &ft. '/{}') | endif
    

In questo modo non è necessario aggiungere un sacco di autocmds per ogni tipo di file / plugin.

se esiste, :set syntax whatevercambia i plugin? Perché sarebbe super :)

  • Una volta caricato un plug-in, viene caricato. A "plug-in" è semplicemente una raccolta di function, commande mapdefinitons. Non conosco alcun modo semplice per "scaricare" questo.

  • Si fa plugin di carico per un tipo di file se e solo se si utilizza :set filetype; In generale, si desidera sempre utilizzare :set filetypee non :set syntax , poiché syntaximposterà solo l'evidenziazione della sintassi e non l'indentazione e altre impostazioni (ad es iskeyword. formatexpr, Ecc.).

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.