Скажем, вы находитесь в папке / очень / круто / и / глубоко / вложенный /. И вы хотите открыть новую вкладку терминала в той же папке.
Как бы Вы это сделали?
Я использую Mac OS и Zsh.
Используйте Oh-My-Zsh и добавьте плагин 'osx' в ваш ~/.zshrc, например:
plugins=(osx)
Если вы используете OSX Terminal App, вам также необходимо добавить плагин terminalapp
: credit
plugins=(osx terminalapp)
Если вы используете iTerm, вам нужно установить опцию конфигурации (обратите внимание, что вам не понадобятся плагины zsh для этого): credit
Предпочтения> Профили> По умолчанию> Общие> Рабочий каталог> Повторно использовать параметр каталога предыдущего сеанса
Это все, что вам нужно сделать!
Еще одна опция, доступная в 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;
это escape-последовательность для печати вещей в заголовке. Похоже, что Terminal.app получает информацию оттуда.
Дополнительная информация:
Это очень простая версия, которую я использовал в 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 сохраняет свои собственные. Обмен историей происходит через общий файл, так что, возможно, это можно сделать и здесь ...
Согласно приведенному выше комментарию Питера, после установки plugins=(git osx)
вы можете просто набрать tab
и он откроет новую вкладку в вашем текущем каталоге.
Вот как ты это делаешь в 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
(источник)
Новые вкладки уже открыты в той же папке (Cmd+T). Для новых окон (Cmd+N) решение от Питера верное:
Предпочтения> Профили> По умолчанию> Общие> Рабочий каталог> Повторно использовать параметр каталога предыдущего сеанса
Добавление терминала в .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.
Если вы хотите, чтобы каталог автоматически изменялся при открытии новой вкладки, используйте плагин dirpersist .
Плагин osx сохраняет только последний каталог, но вам нужно запустить командную tab
чтобы открыть новую вкладку, что не всегда возможно (например, если вы что-то запускаете на текущей вкладке).
Если вам нужно открыть эту новую вкладку прямо сейчас, без изменения файлов конфигурации или установки новых плагинов, запустите:
pwd | pbcopy
Затем откройте новую вкладку «Терминал» вручную (с помощью ⌘T) и на новой вкладке:
cd "`pbpaste`"
Предупреждение: это перезапишет содержимое системного буфера обмена.
Альтернативный, более длинный метод, который не перезаписывает буфер обмена:
pwd > $TMPDIR/wd
Откройте вашу новую вкладку.
cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd