41

Скажем, вы находитесь в папке / очень / круто / и / глубоко / вложенный /. И вы хотите открыть новую вкладку терминала в той же папке.

Как бы Вы это сделали?

Я использую Mac OS и Zsh.

10 ответов10

60

Используйте Oh-My-Zsh и добавьте плагин 'osx' в ваш ~/.zshrc, например:

plugins=(osx)

Если вы используете OSX Terminal App, вам также необходимо добавить плагин terminalapp : credit

plugins=(osx terminalapp)

Если вы используете iTerm, вам нужно установить опцию конфигурации (обратите внимание, что вам не понадобятся плагины zsh для этого): credit

Предпочтения> Профили> По умолчанию> Общие> Рабочий каталог> Повторно использовать параметр каталога предыдущего сеанса

Обновление панели настроек iTerm2 для повторного использования каталога предыдущей сессии.

Это все, что вам нужно сделать!

21

Еще одна опция, доступная в 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 получает информацию оттуда.

Дополнительная информация:

3

Это очень простая версия, которую я использовал в 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)"
1

GDIRS кажется способом почти сделать это: новая вкладка, затем GDIR, чтобы выбрать глубокий каталог и вуаля. Моей первой идеей было сделать стек каталогов общим для всех вкладок и выполнить cd ~ 1 после новой вкладки, но я не могу найти, как это сделать, так как кажется, что каждый экземпляр zsh сохраняет свои собственные. Обмен историей происходит через общий файл, так что, возможно, это можно сделать и здесь ...

0

Согласно приведенному выше комментарию Питера, после установки plugins=(git osx) вы можете просто набрать tab и он откроет новую вкладку в вашем текущем каталоге.

0

Вот как ты это делаешь в 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

(источник)

0

Новые вкладки уже открыты в той же папке (Cmd+T). Для новых окон (Cmd+N) решение от Питера верное:

Предпочтения> Профили> По умолчанию> Общие> Рабочий каталог> Повторно использовать параметр каталога предыдущего сеанса

0

Добавление терминала в .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.
0

Если вы хотите, чтобы каталог автоматически изменялся при открытии новой вкладки, используйте плагин dirpersist .

Плагин osx сохраняет только последний каталог, но вам нужно запустить командную tab чтобы открыть новую вкладку, что не всегда возможно (например, если вы что-то запускаете на текущей вкладке).

0

Если вам нужно открыть эту новую вкладку прямо сейчас, без изменения файлов конфигурации или установки новых плагинов, запустите:

pwd | pbcopy

Затем откройте новую вкладку «Терминал» вручную (с помощью ⌘T) и на новой вкладке:

cd "`pbpaste`"

Предупреждение: это перезапишет содержимое системного буфера обмена.


Альтернативный, более длинный метод, который не перезаписывает буфер обмена:

pwd > $TMPDIR/wd

Откройте вашу новую вкладку.

cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd

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