¿Cómo presento un "modo ligero", en el que no se cargan todos los complementos?

8

Mi config Vim incluye plugins que tratan de manejar proyecto actual, etiquetas de generación, etc . Esto es bastante útil para mi programación diaria en Vim, pero es molesto cuando uso Vim para algunas ediciones rápidas, como:

  • editar un mensaje de confirmación git;
  • edito un comando de shell cuando Ctrl+xCtrl+eescribo zsh o bash;
  • etc.

Tampoco me gusta --noplugins, ya que todavía quiero aprovechar algunos complementos en modo de edición rápida, como surround, movimiento fácil y muchos otros.

Por lo tanto, quiero tener un "modo de luz" (o "modo rápido"), en el que se omitirán algunos de los complementos, pero no todos.

Mi primera idea fue tener un argumento especial de línea de comandos, que analizaría en vimscript, pero buscar rápidamente en Google muestra que actualmente es imposible en vimscript (por cierto, muy triste).

Mi segunda idea es establecer alguna variable de entorno al ejecutar vim, como esta:

$ VIM_LIGHT_MODE=1 vim

Esto funciona en git:

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

Pero si lo hago EDITOR='VIM_LIGHT_MODE=1 vim', y escribo Ctrl+xCtrl+een el shell, no funciona:

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

Entonces probé esto: EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'"pero también falla:

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

(Para ser sincero, este parece particularmente extraño, parece que no entiendo cómo $EDITORse usa exactamente , y me alegrará si alguien explica lo que está sucediendo aquí)

Todos los otros experimentos fallaron también.

El único truco que se me ocurre es configurar algunos servername, como:

$ vim --servername VIM_LIGHTWEIGHT_MODE

Y luego verifique v:servernamevimscript, pero este es un truco total : no es para eso para lo que sirve el nombre del servidor.

Entonces, ¿hay una forma más limpia de lograr lo que quiero?

Dmitry Frank
fuente
2
Se puede utilizar env: EDITOR='env VIM_LIGHT_MODE=1 vim'.
gniourf_gniourf
3
También puede usar otro archivo de inicialización y ejecutar vimcomo vim -u .vimrc-light.
gniourf_gniourf
1
Oh .. Tus dos ideas son geniales, gracias. Y no estaba al tanto de envnada, mi shell-fu todavía es demasiado débil. Considere escribirlo como respuesta, para que pueda aceptarlo.
Dmitry Frank

Respuestas:

10

Hay al menos dos posibilidades:

  1. uso env:

    EDITOR='/usr/bin/env VIM_LIGHT_MODE=1 vim'
    
  2. usar vimcon otro archivo de inicialización, por ejemplo .vimrc-light:

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

Si bien la respuesta aceptada es ciertamente mejor, me gustaría discutir EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'". El problema aquí es que EDITORse invoca con argumentos, y los argumentos pasados ​​a bash -cno se reenvían automáticamente a vim. Necesitas usar "$@":

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

Sin embargo, el primer argumento después del comando en bash -ces $0, que no forma parte $@, por lo que debe usar un argumento de marcador de posición:

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

Con estos inconvenientes, no es una buena opción, pero aún así es viable.

muru
fuente
0

En realidad, su primera idea es posible, también de manera elegante. Puede crear un comando definido por el usuario y luego llamar a vim con la +sintaxis.

Simplemente defina un comando de usuario personalizado en su .vimrcarchivo de la siguiente manera:

command! CustomUserCommandName AnyVimCommandToExecute

Luego, desde la línea de comandos, puede iniciar vim de esta manera:

$ vim +CustomUserCommandName

Usé esto en mi .vimrcpara tomar notas fácilmente, así:

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

Esto permite llamarlo con esto vim +Note. Luego haga un alias de shell en su rcarchivo de shells , para permitir llamadas aún más fáciles. En mi .bashrcarchivo alias los comandos vim anteriores como este:

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

Solución de muestra

En su caso, podría escribir algo a lo largo de estas líneas en su .vimrcarchivo:

command! LightMode let g:lightmode=1

A continuación, pruebe el modo de luz de la forma que desee en función de cada complemento o grupos de complementos, etc., utilizando una ifinstrucción vim similar a esta en su .vimrcarchivo:

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

Cosas a tener en cuenta

  • El !después del comando vim command!significa que este se sobreponen a los comandos definidos de manera similar con el mismo nombre. Esto es preferible.
  • El CustomUserCommandName DEBE tener la primera letra en mayúscula
  • Es posible que no desee contaminar su alcance global con el g:que puede usar s:o con cualquier alcance que se ajuste a sus necesidades.
Arcángel33
fuente