Jak mogę udostępnić aliasy powłoki podczas odpalania od Vima?

11

W mojej .zshrcdeklaruję niektóre pseudonimy. Na przykład which dbstartpokazuje zawartość tego aliasu.

Jeśli otworzę vima z tej powłoki, jest to proces potomny. W Vimie mogę uruchamiać polecenia powłoki za pomocą :! some_command. Jeśli zrobię, :! echo $0aby zobaczyć, jakiej powłoki używa Vim, wypisze „/ bin / zsh”. Jednak moje aliasy są tam niedostępne.

Jak mogę udostępnić normalną powłokę pocisków, gdy odpuszczam od Vima?

Dwa pomysły:

  • W jakiś sposób EXPORTaliasy z oryginalnej powłoki, do jej procesu potomnego vimi ponownie do jego potomnego procesu
  • Skonfiguruj Vima, aby czytał mój .zshrcpodczas tworzenia jego podpowłoki
Nathan Long
źródło
zawierać .zshrc.profile do (co wydaje się być wykorzystanie przezvim
Kiwy

Odpowiedzi:

13

Stare pytanie, ale najczystszym rozwiązaniem dla vima w Zsh było dodanie aliasu ~/.zshenv, pliku ładowanego przez Zsh dla wszystkich powłok, logowania, interaktywnego lub innego. Pozwala to uniknąć uruchamiania vim lub zsh z flagami i ewentualnych problemów z tym związanych.

Ładne wyjaśnienie ~/.zshenvvs ~/.zshrctutaj: http://tanguy.ortolo.eu/blog/article25/shrc

Zasadniczo, zsh zawsze pobiera źródła ~/.zshenv. Interaktywne źródło ~/.zshrcpowłok ~/.zprofileoraz źródło powłok logowania i ~/.zlogin. Tak więc, interaktywne źródła powłoki logowania ~/.zshenv ~/.zprofile ~/.zlogin ~/.zlogini nieinteraktywna powłoka, która nie jest zalogowana, jak ta, której używa vim do uruchamiania źródeł tylko poleceń ~/.zshenv.

Kevin Lee
źródło
To nie jest odpowiedź tylko do linku, ale najlepiej byłoby, gdybyś wyjaśnił wyjaśnienie różnicy w stosunku do linku; w ten sposób każdy może skorzystać z wyjaśnienia tutaj i jesteśmy bezpieczni od linkrot.
HalosGhost,
1
Zaktualizowałem moją odpowiedź o główne punkty z linku.
Kevin Lee
Działa to wykładniczo lepiej dla mnie niż inne odpowiedzi. Kiedy dodałem vima, aby uruchomić interaktywną powłokę, natychmiast się zawiesił. Kiedy używam pliku .zshenv (który wcześniej nie istniał), odzyskałem swoje aliasy!
Caleb,
5

Wygląda na to, że działa dla Zsh:

  • Upewnij się, że $ZDOTDIR=katalog, w którym .zshrcsię znajduje. Na przykład,export ZDOTDIR=$HOME
  • W .vimrc, set shell=zsh\ -ilub set shellcmdflag+=ido tego samego skutku.

-iSię tak dlatego, gdy uruchomiony w trybie interaktywnym, zshell obciążeń $ZDOTDIR/.zshrc. Zobacz man zshi wyszukaj $ZDOTDIRszczegóły.

Nathan Long
źródło
1
Hmmm, to stwarza dla mnie dziwny problem: kopiowanie do schowka systemowego, tak jak "+yteraz, wstrzymuje Vima! superuser.com/questions/712245/…
Nathan Long
5
Mój vim zostaje zawieszony, jak tylko go otworzę.
Caleb,
0

Wierzę, że kiedy jesteś w środku vimi używasz :!some_commandtego, używasz powłoki niezależnie od zmiennej środowiskowej $SHELL.

Jest to konfigurowalne, więc możesz to zmienić, zastępując $SHELLzachowanie $HOME/.vimrcpliku, którego chcesz użyć zsh.

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

Lub w .vimrcużyciu 1 z tych 2 linii

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

Pomoc Vima

Zobacz :help shellod wewnątrz, vimaby uzyskać więcej informacji.

:!{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
źródło
Nie, jak powiedziałem: „Jeśli to zrobię:! Echo 0 $, aby zobaczyć, jakiej powłoki używa Vim, wyprowadza '/ bin / zsh'”
Nathan Long
@NathanLong - nie, myślę, że to cię wprowadza w błąd, zobacz moje aktualizacje.
slm
@slm vim pobiera wartość z $SHELL. Więc twoja skorupa jest /bin/bash. Jeśli moja powłoka jest /bin/zsh, to jej użyje.
Patrick
0

Ustawiając shell=/usr/bin/zsh\ -lsię .vimrcrozwiązać mój problem

Uwaga:

Używam: linux mint 17.1

Murali Kodali
źródło
używanie Ubuntu 14.04 nie działa dla mnie
vilsbole 25.04.16