Como posso disponibilizar os aliases de shell ao descascar do Vim?

9

No meu .zshrc , declaro alguns aliases. Por exemplo, which dbstart mostra o conteúdo desse alias.

Se eu abrir o vim a partir desse shell, é um processo filho. No Vim, posso executar comandos do shell com :! some_command . Se eu fizer :! echo $0 para ver qual shell o Vim está usando, ele gerará '/ bin / zsh'. No entanto, meus aliases não estão disponíveis lá.

Como posso disponibilizar meus shell normais quando saio do Vim?

Duas ideias:

  • De alguma forma EXPORT os aliases do shell original, para o processo filho vim e novamente para o processo filho do shell
  • Configurar o Vim para ler meu .zshrc ao criar seus sub-conjuntos
por Nathan Long 04.02.2014 / 14:21

4 respostas

12

Pergunta antiga, mas a solução mais limpa para o vim no zsh era adicionar o alias a ~/.zshenv , o arquivo que o zsh carrega para todos os shells, login, interativo ou outro. Isso evita iniciar vim ou zsh com sinalizadores e quaisquer possíveis problemas com isso.

Há uma boa explicação de ~/.zshenv vs ~/.zshrc aqui: link

Basicamente, o zsh sempre obtém ~/.zshenv . Origem de shells interativos ~/.zshrc e origem de shells de login ~/.zprofile e ~/.zlogin . Assim, um shell de login interativo origina ~/.zshenv ~/.zprofile ~/.zlogin ~/.zlogin e um shell não interativo e não -login como o que o vim usa para executar comandos apenas de fontes ~/.zshenv .

    
por 18.04.2015 / 22:30
5

Parece que isso funciona para o zsh:

  • Verifique se $ZDOTDIR= do diretório em que .zshrc está localizado. Por exemplo, export ZDOTDIR=$HOME
  • Em .vimrc , set shell=zsh\ -i ou set shellcmdflag+=i para o mesmo efeito.

O -i é porque, quando iniciado no modo interativo, o zshell carrega $ZDOTDIR/.zshrc . Veja man zsh e procure por $ZDOTDIR para detalhes.

    
por 04.02.2014 / 14:37
0

Acredito que quando você está em vim e usa o :!some_command usando o shell definido pela variável de ambiente $SHELL .

Isso é configurável, portanto você pode alterar substituindo o comportamento $SHELL no arquivo $HOME/.vimrc para usar zsh .

:set shell
shell=/bin/bash
:set shell=zsh\ -i

Ou no seu .vimrc usando 1 dessas 2 linhas

 set shell=/bin/bash\ -i
 set shell=/bin/zsh\ -i

Ajuda do vim

Veja :help shell de vim para mais informações.

:!{cmd}                 Execute {cmd} with the shell.  See also the 'shell'
                        and 'shelltype' option.
                        Any '!' in {cmd} is replaced with the previous
                        external command (see also 'cpoptions').  But not when
                        there is a backslash before the '!', then that
                        backslash is removed.  Example: ":!ls" followed by
                        ":!echo ! \! \!" executes "echo ls ! \!".
                        After the command has been executed, the timestamp of
                        the current file is checked timestamp.
    
por 04.02.2014 / 14:34
0

Ao definir shell=/usr/bin/zsh\ -l em .vimrc resolvi meu problema

Nota:

Eu estou usando: linux mint 17.1

    
por 25.06.2015 / 18:27