Come posso introdurre una "modalità luce", in cui non sono caricati tutti i plugin?


8

My Vim config include plug-in che provano a gestire il progetto corrente, creare tag, ecc . Questo è abbastanza utile per la mia programmazione quotidiana in Vim, ma è solo fastidioso quando uso Vim per alcune modifiche rapide, come:

  • modifica un messaggio di commit git;
  • modifica un comando shell quando Ctrl+xCtrl+escrivo zsh o bash;
  • eccetera.

Neanche a me piace --noplugins, dal momento che voglio ancora sfruttare alcuni plugin in modalità di modifica rapida, come surround, easy-motion e molti altri.

Quindi, voglio avere un po 'di "modalità luce" (o "modalità rapida"), in cui alcuni plug-in verranno bypassati, ma non tutti.

La mia prima idea era quella di avere un argomento speciale da riga di comando, che analizzerei in vimscript, ma una rapida ricerca su google mostra che attualmente è impossibile in vimscript (terribilmente triste, comunque).

La mia seconda idea è quella di impostare alcune variabili d'ambiente quando si esegue vim, in questo modo:

$ VIM_LIGHT_MODE=1 vim

Questo funziona in git:

$ git config --global core.editor 'VIM_LIGHT_MODE=1 vim'

Ma se lo faccio EDITOR='VIM_LIGHT_MODE=1 vim'e digito Ctrl+xCtrl+ela shell, non funziona:

edit-command-line:13: command not found: VIM_LIGHT_MODE=1

Poi ho provato questo:, EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'"ma fallisce anche:

vim': -c: line 1: syntax error: unexpected end of file

(Ad essere sincero, questo sembra particolarmente strano, mi sembra di aver frainteso esattamente come $EDITORviene usato, e sarò felice se qualcuno spiegherà cosa sta succedendo qui)

Anche tutti gli altri esperimenti fallirono.

L'unico trucco che mi viene in mente è di impostare alcuni servername, come:

$ vim --servername VIM_LIGHTWEIGHT_MODE

E poi controlla v:servernamevimscript, ma questo è un trucco totale : questo non è affatto il nome del server.

Quindi c'è un modo più pulito per ottenere ciò che voglio?


2
È possibile utilizzare env: EDITOR='env VIM_LIGHT_MODE=1 vim'.
gniourf_gniourf,

3
È inoltre possibile utilizzare un altro file di inizializzazione ed eseguirlo vimcome vim -u .vimrc-light.
gniourf_gniourf,

1
Oh .. Entrambe le tue idee sono fantastiche, grazie. E non ne ero affatto a conoscenza env, il mio shell-fu è ancora troppo debole. Considera di scriverlo come una risposta, in modo che io possa accettarlo.
Dmitry Frank,

Risposte:


10

Esistono (almeno) due possibilità:

  1. usare env:

    EDITOR='/usr/bin/env VIM_LIGHT_MODE=1 vim'
    
  2. utilizzare vimcon un altro file di inizializzazione, ad esempio .vimrc-light:

    EDITOR='/usr/bin/vim -u ~/.vimrc-light'
    

3

Mentre la risposta accettata è sicuramente migliore, mi piacerebbe discutere EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'". Il problema qui è che EDITORviene invocato con argomenti e gli argomenti passati a bash -cnon vengono inoltrati automaticamente a vim. Devi usare "$@":

EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim \"\$@\"'

Tuttavia, il primo argomento dopo il comando in bash -cè $0, che non fa parte di $@, quindi è necessario utilizzare un argomento segnaposto:

EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim \"\$@\" lightvim' 

Con queste insidie, non è una buona opzione, ma realizzabile comunque.


0

In realtà la tua prima idea è possibile, anche in modo elegante. È possibile creare un comando definito dall'utente e quindi chiamare vim con la +sintassi.

Basta definire un comando utente personalizzato nel tuo .vimrcfile in questo modo:

command! CustomUserCommandName AnyVimCommandToExecute

Quindi dalla riga di comando puoi avviare vim in questo modo:

$ vim +CustomUserCommandName

L'ho usato nel mio .vimrcper prendere appunti facilmente, in questo modo:

" Note Taking {{{
command! Note execute "normal \<Plug>VimwikiMakeDiaryNote"
command! Notes execute "normal \<Plug>VimwikiDiaryIndex" | execute "normal \<Plug>VimwikiDiaryGenerateLinks"
" }}}

Ciò consente di chiamarlo con questo vim +Note. Quindi crea un alias di shell nel tuo rcfile di shell , per consentire chiamate ancora più semplici. Nel mio .bashrcfile alias i comandi vim precedenti in questo modo:

alias note="vim +Note"
alias notes="vim +Notes"

Soluzione di esempio

Nel tuo caso potresti scrivere qualcosa lungo queste righe nel tuo .vimrcfile:

command! LightMode let g:lightmode=1

Quindi prova la modalità luce come preferisci per plug-in o gruppi di plugin, ecc ... usando ifun'istruzione vim simile a questa nel tuo .vimrcfile:

if exists("g:lightMode")
    " Do something cool with vim 
endif

Cose da notare

  • Il !comando after the vim command!indica che questo sovrascriverà tutti i comandi definiti in modo simile con lo stesso nome. Questo è preferibile.
  • Il CustomUserCommandName DEVE avere la prima lettera maiuscola
  • Potrebbe non essere necessario inquinare il proprio ambito globale con cui g:è possibile utilizzare s:o qualsiasi ambito adatto alle proprie esigenze.
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.