Откройте новую вкладку в том же каталоге

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

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

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

11 ответов

Решение

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

plugins=(osx)

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

plugins=(osx terminalapp)

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

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

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

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

Еще одна опция, доступная в 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 сохраняет свои собственные. Обмен историей происходит через общий файл, так что, возможно, это можно сделать и здесь...

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

Плагин 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) решение от Питера верное:

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

У меня недостаточно репутации, чтобы комментировать ответы других, я просто хочу прокомментировать ответ @tim и ответить на вопрос @mareoraft в комментарии:

Я понимаю, как это обновляет заголовок, но не понимаю, как это приводит к открытию новой вкладки в том же каталоге, что и предыдущая вкладка. - морской плот

Кажется, Terminal.app определит рабочий каталог на основе того, что ему сказано, я не уверен, как обстоят дела в прошлом, но с Mojave я просто обнаружил, что OSC 7 делает свое дело вместо OSC 2. OSC 7 предназначен для pwd.

В моем .zshrc под Мохаве.

      precmd () {
  print -Pn "\e]2;\a" # OSC - clear previous msg in title bar
  print -Pn "\e]7;%~\a" # OSC - send cwd for title bar, this also enables new tabs to reuse cwd
}

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

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

pwd | pbcopy

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

cd "`pbpaste`"

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


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

pwd > $TMPDIR/wd

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

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

Добавление терминала в.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.
Другие вопросы по тегам