Wie kann ich Shell-Aliase verfügbar machen, wenn ich von Vim aus berufe?

11

In meinem .zshrcdeklariere ich einige Aliase. Zum Beispiel which dbstartzeigt den Inhalt dieses Alias.

Wenn ich vim von dieser Shell aus öffne, ist dies ein untergeordneter Prozess. In Vim kann ich Shell-Befehle mit ausführen :! some_command. Wenn ich sehe :! echo $0, welche Shell Vim verwendet, gibt sie '/ bin / zsh' aus. Meine Aliase sind dort jedoch nicht verfügbar.

Wie kann ich meine normalen Shell-Alises verfügbar machen, wenn ich von Vim aus berufe?

Zwei Ideen:

  • Irgendwie EXPORTdie Aliase von der ursprünglichen Shell zu ihrem untergeordneten Prozess vimund wieder zu ihrem untergeordneten Shell-Prozess
  • Konfigurieren Sie Vim so, dass es my .zshrcbeim Erstellen seiner Subshells liest
Nathan Long
quelle
.zshrcvim
Fügen Sie

Antworten:

13

Alte Frage, aber die sauberste Lösung für vim in zsh war das Hinzufügen des Alias ​​zu ~/.zshenvder Datei, die zsh für alle Shells lädt, login, interaktiv oder auf andere Weise. Dies vermeidet das Starten von vim oder zsh mit Flags und möglichen Problemen damit.

Hier gibt es eine schöne Erklärung für ~/.zshenvvs ~/.zshrc: http://tanguy.ortolo.eu/blog/article25/shrc

Grundsätzlich bezieht zsh immer Quellen ~/.zshenv. Quelle für interaktive Shells und Quelle für ~/.zshrcLogin-Shells ~/.zprofileund ~/.zlogin. Daher werden eine interaktive Anmelde-Shell-Quelle ~/.zshenv ~/.zprofile ~/.zlogin ~/.zloginund eine nicht interaktive Nicht-Anmelde-Shell wie die, die vim verwendet, um nur Befehlsquellen auszuführen ~/.zshenv.

Kevin Lee
quelle
Dies ist keine reine Linkantwort, aber es ist am besten, wenn Sie die Erklärung des Unterschieds zum Link einfügen. Auf diese Weise kann jeder von der Erklärung hier profitieren und wir sind vor Linkrot sicher.
HalosGhost
1
Meine Antwort wurde mit den wichtigsten Punkten des Links aktualisiert.
Kevin Lee
Dies funktionierte für mich exponentiell besser als die anderen Antworten. Als ich für vim hinzugefügt habe, um eine interaktive Shell zu starten, wurde diese sofort angehalten. Wenn ich die .zshenv-Datei verwende (von der ich vorher nicht wusste, dass sie existiert), habe ich meine Aliase zurückbekommen!
Caleb
5

Sieht so aus, als ob dies für zsh funktioniert:

  • Stellen Sie sicher, dass sich $ZDOTDIR=das Verzeichnis .zshrcbefindet. Z.B,export ZDOTDIR=$HOME
  • In .vimrc, set shell=zsh\ -ioder set shellcmdflag+=ifür den gleichen Effekt.

Das -iliegt daran , dass, wenn im interaktiven Modus gestartet wird , lädt zshell $ZDOTDIR/.zshrc. Siehe man zshund suche $ZDOTDIRnach Details.

Nathan Long
quelle
1
Hmmm, das schafft ein seltsames Problem für mich: Durch das Kopieren in die System-Zwischenablage wie "+yjetzt wird Vim angehalten! superuser.com/questions/712245/…
Nathan Long
5
Mein Vim wird suspendiert, sobald ich es öffne.
Caleb
0

Ich glaube, wenn Sie in sind vimund die verwenden, wird die :!some_commandShell verwendet, die von der Umgebungsvariablen definiert wird $SHELL.

Dies ist konfigurierbar, sodass Sie Änderungen vornehmen können, indem Sie das $SHELLVerhalten in Ihrer $HOME/.vimrcDatei überschreiben, das zshstattdessen verwendet werden soll.

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

Oder wenn Sie .vimrc1 dieser 2 Zeilen verwenden

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

Vim Hilfe

Weitere Informationen finden Sie :help shellvon innen vim.

:!{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
quelle
Nein, wie gesagt: "Wenn ich es tue :! Echo $ 0, um zu sehen, welche Shell Vim verwendet, gibt sie '/ bin / zsh' aus"
Nathan Long
@ NathanLong - nein, ich denke, das führt dich in die Irre, siehe meine Updates.
slm
@slm vim zieht den Wert von $SHELL. Also ist deine Muschel /bin/bash. Wenn meine Shell ist /bin/zsh, wird sie verwendet.
Patrick
0

Durch die Einstellung shell=/usr/bin/zsh\ -lin .vimrcmeinem Problem gelöst

Hinweis:

Ich benutze: Linux Mint 17.1

murali kodali
quelle
mit ubuntu 14.04 funktioniert das bei mir nicht
vilsbole