Відкрийте нову вкладку в тому самому каталозі


41

Скажіть, ви перебуваєте у / дуже / круто / та / глибоко / вкладено / у папку. І ви хочете відкрити нову вкладку терміналу в тій же папці.

Як би ти це зробив?

Я використовую Mac OS та Zsh.

Відповіді:


62

Використовуйте Oh-My-Zsh і додайте плагін 'osx' у свій ~ / .zshrc, наприклад:

plugins=(osx)

Якщо ви використовуєте термінальний додаток OSX, вам також потрібно додати terminalappплагін: Credit

plugins=(osx terminalapp)

Якщо ви використовуєте Iterm вам необхідно встановити опцію конфігурації ( Зверніть увагу , що ви можете не потрібні плагін ЗША для цієї роботи ): кредит

Налаштування> Профілі> За замовчуванням> Загальне> Робочий каталог> Використовуйте параметр каталогу каталогу попереднього сеансу

Оновлення панелі налаштувань iTerm2 для повторного використання каталогу попереднього сеансу.

Це все, що вам потрібно зробити!


1
це також працює в iTerm?
ахмі

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

2
Це працює для мене, якщо я не запускаю процес у консолі. Якщо у мене є процес, скажімо, railsзапущений, і я намагаюся відкрити нове вікно за допомогою команд-n, я повертаюся до себе в домашній каталог.
YWCA Привіт

@YWCAЗдрастуйте, ви знайшли рішення цієї проблеми?
Міхал Міщишин

@Miszy Я перейшов до ванілі Bash: /
YWCA Привіт

23

Інший варіант, який зараз доступний у Mac OS X Lion, - це використання вбудованої функції. Він використовує "послідовності втечі", щоб дізнатися поточний каталог. Для мене це працює, якщо я використовую ці команди у своєму .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 відображатиме робочий каталог за допомогою піктограми «проксі» у рядку заголовка, має параметри для створення нових терміналів у тому самому каталозі та підтримує відновлення терміналів. Як зручність, Terminal розгляне вміст заголовків вікна / вкладки, щоб побачити, чи містить вони дійсне ім'я шляху. Однак /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
Я розумію, як це оновлює панель заголовків, але не розумію, як це призводить до того, що нова вкладка відкриється в тому ж каталозі, що і попередня.
мареофт

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 здається способом майже зробити це: нова вкладка, потім gdirs для вибору глибокого каталогу та вуаля. Моя перша ідея полягала в тому, щоб зробити стек каталогів спільним серед усіх вкладок і зробити cd ~ 1 після нової вкладки, але я не можу знайти, як це зробити, оскільки, здається, кожен екземпляр zsh зберігає своє. Обмін історією відбувається через загальний файл, тому, можливо, це можна зробити і тут ...


0

Ось як ви це робите в баш.

Цей скрипт оболонки скаже (тихо буквально, використовуючи 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, як повідомити Terminal про поточний робочий каталог.)
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

Додавання терміналапп до .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) рішення від Pieter правильне:

Налаштування> Профілі> За замовчуванням> Загальне> Робочий каталог> Використовуйте параметр каталогу каталогу попереднього сеансу

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.