Comment introduire un «mode léger», dans lequel tous les plugins ne sont pas chargés?

8

Ma config Vim inclut les plugins qui tentent de gérer projet en cours, les balises de construction, etc . C'est assez utile pour ma programmation quotidienne dans Vim, mais c'est juste ennuyeux quand j'utilise Vim pour des modifications rapides, comme:

  • éditer un message de validation git;
  • éditer une commande shell lorsque je tape Ctrl+xCtrl+ezsh ou bash;
  • etc.

Je n'aime pas non --nopluginsplus, car je veux toujours profiter de certains plugins en mode d'édition rapide, tels que surround, easy-motion et bien d'autres.

Donc, je veux avoir un "mode léger" (ou "mode rapide"), dans lequel certains des plugins seront contournés, mais pas tous.

Ma première idée était d'avoir un argument spécial en ligne de commande, que j'analyserais en vimscript, mais une recherche rapide sur Google montre qu'il est actuellement impossible dans vimscript (horriblement triste, au fait).

Ma deuxième idée est de définir une variable d'environnement lors de l'exécution de vim, comme ceci:

$ VIM_LIGHT_MODE=1 vim

Cela fonctionne dans git:

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

Mais si je le fais EDITOR='VIM_LIGHT_MODE=1 vim'et que je tape Ctrl+xCtrl+edans le shell, cela ne fonctionne pas:

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

Ensuite, j'ai essayé ceci:, EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'"mais il échoue également:

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

(Pour être honnête, celui-ci a l'air particulièrement étrange, il semble que je ne comprenne pas exactement comment il $EDITORest utilisé, et je serais heureux si quelqu'un explique ce qui se passe ici)

Toutes les autres expériences ont également échoué.

Le seul hack auquel je peux penser est d'en définir servername, comme:

$ vim --servername VIM_LIGHTWEIGHT_MODE

Et puis vérifiez v:servernamedans vimscript, mais c'est un hack total : ce n'est pas du tout le nom du serveur.

Existe-t-il un moyen plus propre de réaliser ce que je veux?

Dmitry Frank
la source
2
Vous pouvez utiliser env: EDITOR='env VIM_LIGHT_MODE=1 vim'.
gniourf_gniourf
3
Vous pouvez également utiliser un autre fichier d'initialisation et exécuter en vimtant que vim -u .vimrc-light.
gniourf_gniourf
1
Oh .. Vos deux idées sont cool, merci. Et je n'étais pas du envtout au courant , mon shell-fu est encore trop faible. Pensez à l'écrire comme réponse, afin que je puisse l'accepter.
Dmitry Frank

Réponses:

10

Il y a (au moins) deux possibilités:

  1. utiliser env:

    EDITOR='/usr/bin/env VIM_LIGHT_MODE=1 vim'
    
  2. utiliser vimavec un autre fichier d'initialisation, par exemple .vimrc-light:

    EDITOR='/usr/bin/vim -u ~/.vimrc-light'
    
gniourf_gniourf
la source
3

Bien que la réponse acceptée soit certainement meilleure, j'aimerais en discuter EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'". Le problème ici est qu'il EDITORest invoqué avec des arguments et que les arguments passés à bash -cne sont pas transmis automatiquement à vim. Vous devez utiliser "$@":

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

Cependant, le premier argument après la commande dans bash -cest $0, qui ne fait pas partie de $@, vous devez donc utiliser un argument d'espace réservé:

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

Avec ces pièges, ce n'est pas une bonne option, mais néanmoins réalisable.

muru
la source
0

En fait, votre première idée est possible, de manière élégante aussi. Vous pouvez créer une commande définie par l'utilisateur, puis appeler vim avec la +syntaxe.

Définissez simplement une commande utilisateur personnalisée dans votre .vimrcfichier comme ceci:

command! CustomUserCommandName AnyVimCommandToExecute

Ensuite, à partir de la ligne de commande, vous pouvez démarrer vim comme ceci:

$ vim +CustomUserCommandName

Je l'ai utilisé dans ma .vimrcprise de notes facile, comme ceci:

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

Cela permet de l'appeler avec cela vim +Note. Créez ensuite un alias de shell dans votre rcfichier shell , pour permettre un appel encore plus facile. Dans mon .bashrcfichier, j'alias les commandes vim ci-dessus comme ceci:

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

Exemple de solution

Dans votre cas, vous pouvez écrire quelque chose dans ce sens dans votre .vimrcfichier:

command! LightMode let g:lightmode=1

Ensuite, testez le mode d'éclairage comme vous le souhaitez par plug-in ou par groupe de plug-ins, etc. en utilisant une ifinstruction vim similaire à celle-ci dans votre .vimrcfichier:

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

À noter

  • L' !après la commande vim command!signifie que cela remplacera toutes les commandes définies de manière similaire avec le même nom. C'est préférable.
  • Le CustomUserCommandName MUST doit avoir la première lettre en majuscule
  • Vous ne voudrez peut-être pas polluer votre portée globale avec g:vous pouvez utiliser s:ou toute portée qui correspond à vos besoins.
Archange33
la source