1

Я использую расширение "oh-my-zsh" Робби Рассела на OSX 10.5 Leopard. Однако я нахожу, что он не загружается по умолчанию. Когда я запускаю новый терминал, он использует приглашение ZSH "по умолчанию", и я должен вручную ввести "zsh" и нажать Return, чтобы получить "расширенное" приглашение. Мой файл .zshrc перечисляет путь ZSH как указывающий на каталог oh-my-zsh:

Это очень раздражает, потому что каждый раз, когда я открываю новую вкладку, мне приходится снова вводить zsh (кроме того, можно ли получить новую вкладку, чтобы запомнить мой текущий рабочий каталог? Я в основном пишу приложения на Rails, поэтому у меня будет 2-3 открытых окна в одном и том же каталоге, и это огорчает необходимость каждый раз возвращаться в него). Есть ли простой способ автоматически запустить oh-my-zsh при открытии терминала, чтобы мне не приходилось каждый раз вводить zsh?

РЕДАКТИРОВАТЬ

Я автоматически установил oh-my-zsh, следуя инструкциям Робби на Github, так что вот .zshrc, который он создал для меня:

# Path to your oh-my-zsh configuration.
export ZSH=$HOME/.oh-my-zsh

# Set to the name theme to load.
# Look in ~/.oh-my-zsh/themes/
export ZSH_THEME="maran"

# Comment this out to disable weekly auto-update checks
# export DISABLE_AUTO_UPDATE="false"

source $ZSH/oh-my-zsh.sh

# Customize to your needs...
export     PATH=/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr  /local/bin:/usr/X11/bin:/usr/local/git/bin
export GIT_EDITOR="mate -w"

Я попытался изменить оболочку по умолчанию, чтобы указать на это, но затем я получаю сообщение об ошибке, говорящее, что она установлена в недопустимую переменную. Переменная $ HOME правильно указывает на мой домашний каталог, но, похоже, она не загружается, пока я не наберу zsh в терминале, когда у меня появляется обычное приглашение zsh.

РЕДАКТИРОВАТЬ

Вот вывод команды pstree -wp $$

-+= 00001 root /sbin/launchd
 \-+= 00066 waynemolina /sbin/launchd
   \-+= 68844 waynemolina /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_704684
     \-+= 68845 root login -pfq waynemolina /bin/zsh
       \-+= 68846 waynemolina -zsh
         \-+= 68939 waynemolina pstree -wp 68846
           \--- 68940 root ps -axwwo user

4 ответа4

2

Я не слишком много знаю о том, как Mac OS X работает с оболочками, но в целом я нахожу полезным разбрасывать некоторые операторы echo вокруг моих файлов инициализации, чтобы убедиться, что они получены. Итак, в вашем файле .zshrc вы можете поместить строку с надписью echo "Loading .zshrc" . И так далее. Наличие или отсутствие этих эхо-операторов при запуске новой оболочки (или открытии новой вкладки) должно помочь вам диагностировать проблему.

Что касается проблемы смены каталогов, есть два возможных решения:
1. Используйте экран и забудьте о вкладках.
2. Напишите функцию для отображения текущего каталога в каком-либо файле, затем поместите эту функцию в ваш precmd, а затем добавьте строку в .zshrc для чтения этого файла и cd в него. Чтобы быть более конкретным (но не проверено!):

PWD_SAVE_FILE="$HOME/.pwd_save"
function savepwd {
  pwd > "$PWD_SAVE_FILE"
}

function precmd {
  savepwd
}

cd "`cat "$PWD_SAVE_FILE"`"
2

Вернувшись к 10.4, Терминал предпочитает «При создании нового окна Терминала» использовать /usr/bin/login или позволить пользователю указать команду. Я ожидаю, что Терминал в 10.5 имеет нечто подобное.

У вас случайно не указано что-то вроде zsh -f вместо команды /usr/bin/login или zsh без -f? Опция -f заставит zsh игнорировать все файлы запуска, кроме /etc/zshenv (т.е. он будет игнорировать ваш ~/.zshrc).

Другой способ проверить этот параметр может быть с defaults read com.apple.Terminal Shell . Если он показывает какой-то вывод, у вас есть пользовательские настройки. Если оно пустое или не существует, вы, вероятно, по-прежнему используете значение по умолчанию /usr/bin/login .

Отредактировано, чтобы добавить:
В одной из ваших оболочек с приглашением по умолчанию (новое окно терминала или вкладка) проверьте следующее:

  • set -o | fgrep rcs показать « вкл » для norcs?
  • Do [[ "$ZDOTDIR" -ef "$HOME" ]] || echo "ZDOTDIR=$ZDOTDIR" показать что-нибудь?

Если одно или оба из этих условий выполняются, вам необходимо отследить, где они устанавливаются. Обратите внимание, что norcs может быть установлен с любым из set +o rcs , set -o norcs , setopt norcs , unsetopt rcs или set -f . Кроме того, имена опций не чувствительны к регистру и могут содержать подчеркивания, вставленные где угодно (NO_rC___s - то же самое, что и norcs). Посмотрите в /etc/zshenv , /etc/zprofile , /etc/zshrc , /etc/zlogin ; и .zshenv , .zprofile , .zshrc и .zlogin из вашего каталога ZDOTDIR.

Также может быть полезно узнать полное происхождение ваших оболочек «приглашения по умолчанию» (pstree -wp $$ если у вас есть pstree from (например) MacPorts). Может быть, обычный процесс 'rc' прерывается чем-то вроде zsh -f в файле 'rc'.

1

У меня была эта проблема. Это было из-за наличия .zlogin в моем домашнем каталоге. Как только я удалил .zlogin ой мой зш работал

0

Попробуйте поместить это в файл ~/.zshrc для целей отладки:

Сразу после этой строки:

export ZSH=$HOME/.oh-my-zsh

Положил:

echo $HOME
echo $ZSH

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .