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


41

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

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

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

Ответы:


62

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

plugins=(osx)

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

plugins=(osx terminalapp)

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

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

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

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


1
это также работает в iTerm?
Ахми,

1
@ahmy выглядит так, как должно: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/osx/…
philfreo

2
Это работает для меня, если я не запускаю процесс в консоли. Если у меня есть процесс, скажем, railsзапущенный, и я пытаюсь открыть новое окно с помощью команды n, я возвращаюсь в свой домашний каталог.
YWCA Привет

@YWCAHello вы нашли решение этой проблемы?
Михал Мищишин

@Miszy Я вернулся в Vanilla Bash: /
YWCA Привет

23

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

Больше информации:


Кроме того, я думаю, что по умолчанию это имеет oh-my-zsh . Я использую это в течение недели или около того, и это работает в значительной степени из коробки.
Тим

Начиная с Mac OS X Lion 10.7, Terminal отображает рабочий каталог с помощью значка «proxy» в строке заголовка, имеет опции для создания новых терминалов в том же каталоге и поддерживает возобновление работы терминалов. Для удобства Терминал будет просматривать содержимое заголовков окна / вкладки, чтобы увидеть, содержат ли они допустимое имя пути. Тем не менее, /etc/bashrcвы увидите, что он также поддерживает новый управляющий код для информирования терминала о рабочем каталоге с помощью file:URL-адреса, который может обрабатывать все допустимые имена путей с помощью процентного кодирования (заголовки окна / вкладки могут содержать только подмножество символов ASCII ).
Крис Пейдж

2
Экранирующая последовательность для установки рабочего каталога является тем же основным кодом, что и для задания заголовков - Команда операционной системы (OSC) - с кодом 7 вместо 0-2:\e]7;file://hostname/percent-encoded-pathname\a
Крис Страница

3
Зачем использовать precmd и preexec? Почему не просто chpwd () {print -Pn "\e]2; %~/ \a"}?
Ник

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

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)"

Это круто, но требует, чтобы вы фактически выполнили команду на вкладке для обновления. В редких случаях это может привести к неожиданному поведению. Может быть, есть другая функция, которую мы можем использовать, которая срабатывает при переключении вкладок вместо запуска команды?
mareoraft

1

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


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

( источник )


Обратите внимание, что начиная с Mac OS X Lion 10.7, по умолчанию Terminal запускает новые вкладки в том же рабочем каталоге, что и предыдущая вкладка. Так что вам нужно только договориться о создании вкладки сейчас. (Если вы используете bash. Если вы используете другую оболочку, посмотрите код в / etc / bashrc, чтобы узнать, как Терминал узнает о текущем рабочем каталоге.)
Chris Page

0

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

pwd | pbcopy

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

cd "`pbpaste`"

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


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

pwd > $TMPDIR/wd

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

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

0

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


0

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

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


0

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

0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.