Come posso rendere disponibili gli alias di shell quando eseguo il shell out da Vim?


11

Nel mio .zshrc, dichiaro alcuni alias. Ad esempio, which dbstartmostra il contenuto di tale alias.

Se apro vim da quella shell, è un processo figlio. In Vim, posso eseguire comandi shell con :! some_command. Se lo faccio :! echo $0per vedere quale shell Vim sta usando, genera "/ bin / zsh". Tuttavia, i miei alias non sono disponibili lì.

Come posso rendere disponibili i miei normali alise shell quando esco da Vim?

Due idee:

  • In qualche modo EXPORTgli alias dalla shell originale, al suo processo figlio vim, e ancora al suo processo figlio shell
  • Configura Vim per leggere my .zshrcdurante la creazione dei suoi subshells

includi il tuo .zshrcin .profile (che sembra essere usato davim
Kiwy il

Risposte:


13

Vecchia domanda, ma la soluzione più pulita per vim in zsh era aggiungere l'alias ~/.zshenv, il file che zsh carica per tutte le shell, login, interattivo o altro. Questo evita di avviare vim o zsh con flag e qualsiasi possibile problema.

C'è una bella spiegazione di ~/.zshenvvs ~/.zshrcqui: http://tanguy.ortolo.eu/blog/article25/shrc

Fondamentalmente, zsh sempre fonti ~/.zshenv. Sorgente di shell interattive ~/.zshrce sorgente di shell di accesso ~/.zprofilee ~/.zlogin. Pertanto, una shell di login interattiva ~/.zshenv ~/.zprofile ~/.zlogin ~/.zlogine una shell non interattiva, non login come quella utilizzata da vim per eseguire solo i comandi ~/.zshenv.


Questa non è una risposta solo per i collegamenti, ma sarebbe meglio se tu spiegassi la spiegazione della differenza rispetto al collegamento; in questo modo tutti possono trarre vantaggio dalla spiegazione qui e siamo al sicuro da linkrot.
HalosGhost,

1
Aggiornato la mia risposta con i punti principali del link.
Kevin Lee,

Questo ha funzionato esponenzialmente meglio per me rispetto alle altre risposte. Quando ho aggiunto per vim di avviare una shell interattiva, è stata immediatamente sospesa. Quando uso il file .zshenv (che prima non sapevo esistesse), ho ripreso i miei alias!
Caleb,

5

Sembra che questo funzioni per zsh:

  • Assicurarsi che $ZDOTDIR=la directory in cui .zshrcsi trova. Per esempio,export ZDOTDIR=$HOME
  • In .vimrc, set shell=zsh\ -io set shellcmdflag+=iper lo stesso effetto.

Questo -iperché, quando avviato in modalità interattiva, zshell si carica $ZDOTDIR/.zshrc. Vedi man zshe cerca i $ZDOTDIRdettagli.


1
Hmmm, questo crea un problema strano per me: copiare negli appunti di sistema come "+yadesso sospende Vim! superuser.com/questions/712245/…
Nathan Long

5
Il mio video viene sospeso non appena lo apro.
Caleb,

0

Credo che quando sei dentro vime usi il :!some_commandsuo utilizzo qualunque sia la shell definita dalla variabile d'ambiente $SHELL.

Questo è configurabile, quindi puoi cambiare sovrascrivendo il $SHELLcomportamento nel tuo $HOME/.vimrcfile da usare zsh.

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

O nel tuo .vimrcutilizzo di 1 di queste 2 righe

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

Aiuto Vim

Vedi :help shelldall'interno vimper maggiori informazioni.

:!{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.

No, come ho detto: "Se lo faccio:! Echo $ 0 per vedere quale shell Vim sta usando, genera '/ bin / zsh'"
Nathan Long

@NathanLong - no, penso che ti induca in errore, vedi i miei aggiornamenti.
slm

@slm vim estrae il valore da $SHELL. Quindi lo è il tuo guscio /bin/bash. Se la mia shell è /bin/zsh, ecco cosa userà.
Patrick,

0

Impostando shell=/usr/bin/zsh\ -lin .vimrcrisolto il mio problema

Nota:

Sto usando: Linux mint 17.1


usando Ubuntu 14.04 questo non funziona per me
vilsbole
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.