2016-04-09 7 views
11

Ich habe iTerm2 vor kurzem neu installiert und stoße jetzt auf ein interessantes Problem, nachdem ich iTerm Shell Integration eingerichtet habe.iTerm2 Shell Integration und Oh My Zsh Conflicts

Nach Öffnen Sie ein neues Terminal-Fenster, scheint alles in Ordnung zu suchen, von den richtigen "agnoster" Thema zeigt Oh My ZSH:

working

Wenn ich clear ausgeben, jetzt ist mein Terminal-Fenster sieht wie folgt aus :

not working

ich die Dinge in den ursprünglichen Zustand einmal zurückkehren können durch Sourcing ~/.zshrc wieder, aber ich bin wirklich neugierig das Root-Problem und wenn es eine Möglichkeit gibt, es zu beheben.

Ich habe versucht, den Marker in iTerm Einstellungen zu verstecken, aber das führt nur zu einem leeren Terminal.

In einer früheren Installation (bevor ich diesen Mac löschte), hatte ich Oh My ZSH und Shell Integration beide, und obwohl es manchmal etwas wackelig schien, schien es immer noch das Oh My ZSH Thema zu halten, unabhängig von Clearing das Terminal oder einen anderen Befehl ausgeben.

Hat jemand irgendwelche Ideen dazu? Ich habe die iTerm-Einstellungen immer wieder überprüft, kann aber nichts finden, was in Zusammenhang steht.

+0

Es gibt ein Problem auf [gitlab] (https://gitlab.com/gnachman/iterm2/issues/4327). Vielleicht kann es dir helfen. – NaN

+0

@NaN - Danke, das scheint das Problem zu sein! Ich war in der Lage, die Lösung unten zu verwenden und jetzt funktioniert alles perfekt. :) – Will

Antwort

9

Ich habe gerade die Shell-Integration in iTerm 2 installiert (Build 2.9.20160313) und hatte genau das gleiche Problem.

So wie ich es durch das Hinzufügen einer einzigen Zeile ~/.iterm2_shell_integration.zsh direkt nach export ITERM_SHELL_INTEGRATION_INSTALLED=Yes in Zeile 3 gelöst war:

ITERM2_PRECMD_PS1="$PS1"

So ist dies, wie der Leiter der oben genannten Datei aussieht:

if [[ -o login ]]; then 
    if [ "$TERM" != "screen" -a "$ITERM_SHELL_INTEGRATION_INSTALLED" = "" ]; then 
    export ITERM_SHELL_INTEGRATION_INSTALLED=Yes 

    ## BEGIN EDIT 
    ITERM2_PRECMD_PS1="$PS1" 
    ## END EDIT 

    # Indicates start of command output. Runs just before command executes. 
    iterm2_before_cmd_executes() { 
     printf "\033]133;C;\007" 
    } 

    # ... 

Es ist wahrscheinlich ein Fehler, da (wie Sie aus den Kommentaren in der gleichen Datei sehen können) das Skript Ihre $PS1 bei der Anmeldung speichern soll, aber es tut es nicht.

+1

Das funktioniert wie ein Charme! Danke, für die schnelle Antwort. Jetzt kann ich zur Arbeit kommen! :) – Will

+2

Ich kommentieren auch Zeile 4: 'ITERM2_SHOULD_DECORATE_PROMPT =" 1 "' –

9

Späte Antwort, aber das hat für mich funktioniert.

Auf der Seite "iTerm2 Shell Integrations" laden Sie das Installationsskript herunter und leiten es in bash.

Stattdessen, laden Sie es lokal und ändern Sie es so, dass es weiß, dass Sie ZSH verwenden.

Zuerst laden Sie das Skript

wget https://iterm2.com/misc/install_shell_integration.sh 

Dann stattdessen das Skript bestimmen, der mit der Schale definieren sie nur als „zsh“

# comment out this line 
# SHELL=$(echo "${SHELL}" | tr/"\n" | tail -1) 

# replace it with this line 
SHELL="zsh" 

Als nächstes wird das Skript ausführbar machen installieren und dann laufen es

chmod +x install_shell_integration.sh 
./install_shell_integration.sh 

Danach sollte die Integration ordnungsgemäß installiert werden.

Hinweis Entfernen Sie die Bash-Integration, wenn Sie sie nicht benötigen.

rm ~/.iterm2_shell_integration.bash 
+2

Danke, das hat für mich funktioniert. Das Problem war: obwohl ich zsh aus irgendeinem Grund von SHELL Variable war Bash! hardcoding es zu zsh hat den Trick! – Geek

+0

Dies ist nicht mehr notwendig, da der Fehler behoben wurde. Trotzdem zeigt es immer noch, wie man die Integration installiert. – noun

Verwandte Themen