Como introduzo um "modo leve", no qual nem todos os plugins são carregados?

8

Minha configuração Vim inclui plugins que tentam lidar com projeto atual, etiquetas construção, etc . Isso é bastante útil para minha programação diária no Vim, mas é irritante quando eu uso o Vim para algumas edições rápidas, como:

  • editar uma mensagem de confirmação do git;
  • edite um comando shell quando digito Ctrl+xCtrl+ezsh ou bash;
  • etc.

Também não gosto dos --nopluginsdois, pois ainda quero tirar proveito de alguns plug-ins no modo de edição rápida, como surround, easy-motion e muitos outros.

Então, eu quero ter algum "modo leve" (ou "modo rápido"), no qual alguns dos plugins serão ignorados, mas não todos.

Minha primeira ideia foi ter algum argumento especial da linha de comando, que eu analisaria no vimscript, mas uma pesquisa rápida mostra que atualmente é impossível no vimscript (a propósito, muito triste).

Minha segunda idéia é definir alguma variável de ambiente ao executar o vim, assim:

$ VIM_LIGHT_MODE=1 vim

Isso funciona no git:

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

Mas se eu fizer EDITOR='VIM_LIGHT_MODE=1 vim'e digitar Ctrl+xCtrl+eo shell, ele não funcionará:

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

Então eu tentei isso:, EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'"mas também falha:

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

(Para ser honesto, este parece particularmente estranho, parece que eu entendi mal como exatamente $EDITORé usado e ficarei feliz se alguém explicar o que está acontecendo aqui)

Todos os outros experimentos falharam também.

O único truque que consigo pensar é definir alguns servername, como:

$ vim --servername VIM_LIGHTWEIGHT_MODE

E depois faça o check- v:servernamein do vimscript, mas este é um truque total : não é para isso que serve o servername.

Então, existe uma maneira mais limpa de alcançar o que eu quero?

Dmitry Frank
fonte
2
Você pode usar env: EDITOR='env VIM_LIGHT_MODE=1 vim'.
gniourf_gniourf
3
Você também pode usar outro arquivo de inicialização e executar vimcomo vim -u .vimrc-light.
gniourf_gniourf
1
Oh .. Suas duas idéias são legais, obrigado. E eu não estava ciente de envtudo, meu shell-fu ainda está muito fraco. Considere escrever como resposta, para que eu possa aceitá-lo.
Dmitry Frank

Respostas:

10

Existem (pelo menos) duas possibilidades:

  1. use env:

    EDITOR='/usr/bin/env VIM_LIGHT_MODE=1 vim'
    
  2. use vimcom outro arquivo de inicialização, diga .vimrc-light:

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

Embora a resposta aceita seja certamente melhor, eu gostaria de discutir EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'". O problema aqui é que EDITORé invocado com argumentos, e os argumentos passados ​​para bash -cnão são encaminhados automaticamente para vim. Você precisa usar "$@":

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

No entanto, o primeiro argumento após o comando in bash -cé $0, do qual não faz parte $@, portanto, você precisa usar um argumento de espaço reservado:

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

Com essas armadilhas, não é uma boa opção, mas é viável mesmo assim.

muru
fonte
0

Na verdade, sua primeira idéia é possível, de uma maneira elegante também. Você pode criar um comando definido pelo usuário e, em seguida, chamar o vim com a +sintaxe.

Basta definir um comando de usuário personalizado em seu .vimrcarquivo, da seguinte maneira:

command! CustomUserCommandName AnyVimCommandToExecute

A partir da linha de comando, você pode iniciar o vim da seguinte forma:

$ vim +CustomUserCommandName

Eu usei isso no meu .vimrcpara anotações fáceis, assim:

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

Isso permite chamá-lo com isso vim +Note. Em seguida, crie um apelido de shell no rcarquivo shells , para permitir chamadas ainda mais fáceis. No meu .bashrcarquivo, alias os comandos vim acima, como este:

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

Solução de amostra

No seu caso, você pode escrever algo como estas no seu .vimrcarquivo:

command! LightMode let g:lightmode=1

Em seguida, teste o modo leve como desejar, por plug-in ou grupos de plug-ins, etc ... usando uma ifinstrução vim semelhante a esta em seu .vimrcarquivo:

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

Coisas a Nota

  • O !comando after vim command!significa que isso substituirá quaisquer comandos definidos da mesma forma com o mesmo nome. Isto é preferível.
  • A CustomUserCommandName DEVE ter a primeira letra maiúscula
  • Você pode não querer poluir seu escopo global com g:o uso s:ou com qualquer escopo que atenda às suas necessidades.
Arcanjo33
fonte