Como posso disponibilizar aliases de shell ao usar o Vim?

11

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

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

Como posso disponibilizar o meu shell normal quando saio do Vim?

Duas idéias:

  • De alguma forma, EXPORTos aliases do shell original, para o processo filho vime novamente para o processo filho do shell
  • Configure o Vim para ler meu .zshrcao criar seus subshells
Nathan Long
fonte
incluir o seu .zshrc.profile em (o que parece ser o uso porvim
kiwy

Respostas:

13

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

Há uma boa explicação sobre ~/.zshenvvs ~/.zshrcaqui: http://tanguy.ortolo.eu/blog/article25/shrc

Basicamente, o zsh sempre origina ~/.zshenv. Fonte de shells interativa ~/.zshrce fonte de shells de login ~/.zprofilee ~/.zlogin. Portanto, fontes de shell de logon interativas ~/.zshenv ~/.zprofile ~/.zlogin ~/.zlogine um shell não interativo e sem logon como o que o vim usa para executar comandos apenas de fontes ~/.zshenv.

Kevin Lee
fonte
Essa não é uma resposta apenas para o link, mas seria melhor se você descrevesse a explicação da diferença no link; Dessa forma, todos podem se beneficiar da explicação aqui e estamos a salvo do linkrot.
precisa saber é o seguinte
1
Atualizei minha resposta com os pontos principais do link.
Kevin Lee
Isso funcionou exponencialmente melhor para mim do que as outras respostas. Quando adicionei o vim para iniciar um shell interativo, ele foi suspenso imediatamente. Quando uso o arquivo .zshenv (que antes não sabia que existia), recebi meus apelidos de volta!
Caleb
5

Parece que isso funciona para o zsh:

  • Verifique se $ZDOTDIR=o diretório .zshrcestá localizado. Por exemplo,export ZDOTDIR=$HOME
  • Em .vimrc, set shell=zsh\ -iou set shellcmdflag+=ipara o mesmo efeito.

O -ié porque, quando iniciado no modo interativo, zshell cargas $ZDOTDIR/.zshrc. Veja man zshe procure $ZDOTDIRpor detalhes.

Nathan Long
fonte
1
Hmmm, isso cria um problema estranho para mim: copiar para a área de transferência do sistema como "+yagora suspende o Vim! superuser.com/questions/712245/…
Nathan Long
5
Meu vim fica suspenso assim que eu o abro.
Caleb
0

Eu acredito que quando você está vime usa o :!some_commandque está usando qualquer shell que é definido pela variável de ambiente $SHELL.

Isso é configurável; portanto, você pode alterar substituindo o $SHELLcomportamento do seu $HOME/.vimrcarquivo a ser usado zsh.

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

Ou no .vimrcuso de 1 dessas 2 linhas

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

Ajuda do Vim

Veja :help shellde dentro vimpara 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.
slm
fonte
Não, como eu disse: "Se eu fizer:! Echo $ 0 para ver qual shell o Vim está usando, ele gera '/ bin / zsh'"
Nathan Long
@ NathanLong - não, eu acho que isso é enganador, veja minhas atualizações.
Slm
O @slm vim obtém o valor de $SHELL. Então sua concha é /bin/bash. Se meu shell for /bin/zsh, é isso que ele usará.
284 Patrick Patrick
0

Ao definir shell=/usr/bin/zsh\ -lem .vimrcresolveu o meu problema

Nota:

Estou usando: linux mint 17.1

murali kodali
fonte
usando o Ubuntu 14.04 isso não funciona para mim
vilsbole