Ответы:
Используйте Oh-My-Zsh и добавьте плагин 'osx' в ваш ~ / .zshrc, например:
plugins=(osx)
Если вы используете OSX Terminal App, вам также нужно добавить terminalapp
плагин: credit
plugins=(osx terminalapp)
Если вы используете iTerm, вам нужно установить опцию конфигурации ( обратите внимание, что вам не понадобятся плагины zsh, чтобы это работало ): credit
Предпочтения> Профили> По умолчанию> Общие> Рабочий каталог> Повторно использовать параметр каталога предыдущего сеанса
Это все, что вам нужно сделать!
rails
запущенный, и я пытаюсь открыть новое окно с помощью команды n, я возвращаюсь в свой домашний каталог.
Еще одна опция, доступная в Mac OS X Lion, - это использование встроенной функции. Он использует «escape-последовательности», чтобы узнать текущий каталог. Для меня это работает, если я использую эти команды в моем .zshrc:
precmd () {print -Pn "\e]2; %~/ \a"}
preexec () {print -Pn "\e]2; %~/ \a"}
также можно использовать PS1
(для Bash, из этой вики ):
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
где \e]2;
последовательность перехода, чтобы напечатать вещи в заголовке. Это кажется , что Terminal.app получает информацию от там.
Больше информации:
/etc/bashrc
вы увидите, что он также поддерживает новый управляющий код для информирования терминала о рабочем каталоге с помощью file:
URL-адреса, который может обрабатывать все допустимые имена путей с помощью процентного кодирования (заголовки окна / вкладки могут содержать только подмножество символов ASCII ).
\e]7;file://hostname/percent-encoded-pathname\a
chpwd () {print -Pn "\e]2; %~/ \a"}
?
Это очень простая версия, которую я использовал в bash, а также она работает в zsh. Он сохраняет текущую папку в файле после каждой команды (не слишком больно для IMO) и открывает новый терминал в сохраненной текущей папке.
добавить следующее в .zshrc
# emulate bash PROMPT_COMMAND (only for zsh)
precmd() { eval "$PROMPT_COMMAND" }
# open new terminal in same dir
PROMPT_COMMAND='pwd > "${HOME}/.cwd"'
[[ -f "${HOME}/.cwd" ]] && cd "$(< ${HOME}/.cwd)"
GDIRS кажется способом почти сделать это: новая вкладка, затем GDIR, чтобы выбрать глубокий каталог и вуаля. Моя первая идея состояла в том, чтобы сделать стек каталогов общим для всех вкладок и выполнить cd ~ 1 после новой вкладки, но я не могу найти, как это сделать, так как кажется, что каждый экземпляр zsh сохраняет свои собственные. Обмен историей происходит через общий файл, так что, возможно, это можно сделать и здесь ...
Вот как ты это делаешь в bash.
Этот сценарий оболочки скажет (буквально тихо, используя Applescript) Terminal.app открыть новую вкладку и переключиться на текущий каталог:
#!/bin/bash
osascript -e 'tell application "Terminal"' \
-e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
-e "do script with command \"cd `pwd`;clear\" in selected tab of the front window" \
-e 'end tell' &> /dev/null
… Поместите приведенный выше сценарий оболочки в директорию вашего каталога $PATH
(например, / usr / local / bin) и убедитесь, что он исполняемый:
$ chmod +x /usr/local/bin/nt
( источник )
Если вам нужно открыть эту новую вкладку прямо сейчас, без изменения файлов конфигурации или установки новых плагинов, запустите:
pwd | pbcopy
Затем откройте новую вкладку «Терминал» вручную (с помощью ⌘T) и на новой вкладке:
cd "`pbpaste`"
Предупреждение : это перезапишет содержимое системного буфера обмена.
Альтернативный, более длинный метод, который не перезаписывает буфер обмена:
pwd > $TMPDIR/wd
Откройте вашу новую вкладку.
cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd
Если вы хотите, чтобы каталог автоматически изменялся при открытии новой вкладки, используйте плагин dirpersist .
Плагин osx сохраняет только последний каталог, но вам нужно запустить команду, tab
чтобы открыть новую вкладку, что не всегда возможно (если, скажем, вы что-то запускаете в текущей вкладке).
Добавление Terminalapp в .zshrc не работает для меня, поэтому я искал плагин, ~/.oh-my-zsh/plugins/terminalapp
и он говорит мне:
# This file is intentionally empty.
#
# The terminalapp plugin is deprecated and may be removed in a future release.
# Its functionality has been folded in to the core lib/termsupport.zsh, which
# is loaded for all users. You can remove terminalapp from your $plugins list
# once all your systems are updated to the current version of Oh My Zsh.