Aynı dizinde yeni bir sekme aç


41

/ Very / cool / ve / deeply / nested / folder içinde olduğunuzu söyleyin. Ve aynı klasörde yeni bir terminal sekmesi açmak istiyorsunuz.

Bunu nasıl yaptın?

Mac OS ve Zsh kullanıyorum.

Yanıtlar:


62

Oh-My-Zsh kullanın ve ~ / .zshrc dosyasına 'osx' eklentisini ekleyin:

plugins=(osx)

OSX'in Terminal Uygulamasını kullanıyorsanız, terminalappeklentiyi de eklemeniz gerekir : kredi

plugins=(osx terminalapp)

Eğer ITERM kullanırsanız bir yapılandırma seçeneği (ayarlamanız gerekir Eğer iş bunun için zsh eklentileri ihtiyaç olmayabilir Not ): kredi

Tercihler> Profiller> Varsayılan> Genel> Çalışma Dizini> Önceki oturumun dizin seçeneğini yeniden kullan

Önceki oturum dizinini yeniden kullanmak için iTerm2 Tercihler paneli güncellemesi.

Yapmanız gereken tek şey bu!


1
Bu aynı zamanda iTerm’de de çalışıyor mu?
ahmy

1
@ahmy olması gerektiği gibi görünüyor: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/osx/…
philfreo

2
Konsolda bir işlem yürütmediğim sürece bu benim için çalışıyor. Eğer bir işlemim varsa, railsçalışan demek ve komut-n üzerinden yeni bir pencere açmaya çalışıyorum, sonunda ev dizinime geri dönüyorum.
YWCA Merhaba

@ YWCAHello bu soruna bir çözüm buldunuz mu?
Michał Miszczyszyn

@Miszy Vanilla Bash'e geri döndüm: /
YWCA Merhaba

23

Mac OS X Lion'da artık mevcut olan başka bir seçenek, yerleşik özelliği kullanıyor. Geçerli dizini bulmak için 'kaçış dizileri' kullanır. Benim için bu komutları .zshrc dosyamda kullanırsam çalışır:

precmd () {print -Pn "\e]2; %~/ \a"}
preexec () {print -Pn "\e]2; %~/ \a"}

kullanımı da mümkündür PS1(Bash için, bu wiki'den ):

export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "

\e]2;Başlık çubuğundaki şeyleri yazdırmak için kaçış dizisi nerede . O görünüyor Terminal.app oradan da bilgi elde ettiğini.

Daha fazla bilgi:


Ayrıca, oh-my-zsh varsayılan olarak buna sahiptir. Bunu bir haftadan beri kullanıyorum ve hemen hemen kutunun dışında çalışıyor.
Tim

Mac OS X Lion 10.7'den itibaren, Terminal, çalışma dizinini başlık çubuğundaki “proxy” simgesini kullanarak görüntüleyecek, aynı dizinde yeni terminaller oluşturma seçeneklerine sahip olacak ve Resuming terminallerini destekleyecek. Kolaylık olarak Terminal, geçerli bir yol adı içerip içermediklerini görmek için pencere / sekme başlıklarının içeriğine bakacaktır. Bununla birlikte, /etc/bashrcçalışma dizininin bir file:URL kullanarak bilgilendirilmesi için yeni bir kaçış kodunu da desteklediğini göreceksiniz. Bu , tüm geçerli yol adlarını yüzde kodlamasıyla işleyebiliyor (pencere / sekme başlıkları yalnızca ASCII karakterlerinin bir alt kümesini içerebilir) ).
Chris Sayfa

2
Çalışma dizinini ayarlamak için çıkış sırası kodunun 7 yerine 0-2 -with başlıkları-İşletim Sistemi Komuta (OSC) ayarlamak için aynı temel kodu şöyledir:\e]7;file://hostname/percent-encoded-pathname\a
Chris Sayfa

3
Neden precmd ve preexec kullanıyorsunuz? Neden sadece değil chpwd () {print -Pn "\e]2; %~/ \a"}?
Nick,

1
Bunun başlık çubuğunu nasıl güncellediğini anlıyorum, ancak bunun önceki sekmeyle aynı dizinde nasıl yeni bir sekmenin açılmasına neden olduğunu anlamıyorum.
mareoraft

3

Bu bash kullanılan ve aynı zamanda zsh çalışır çok basit bir sürümüdür. Geçerli klasörü, her komuttan sonra (çok fazla IMO'ya zarar vermez) bir dosyaya kaydeder ve kaydedilmiş geçerli klasörde yeni bir terminal açar.

aşağıdakini .zshrc'ye ekleyin

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

Bu havalıdır ancak güncellemek için gerçekten bir sekmede komut çalıştırmanızı gerektirir. Bu nadir durumlarda beklenmeyen davranışlara neden olabilir. Belki bir komut çalıştırmak yerine sekmeleri değiştirdiğinizde tetikleyebileceğimiz farklı bir işlev vardır?
46'da

1

gdirs neredeyse bunu yapmanın bir yolu gibi görünüyor: yeni sekme, daha sonra derin dizini ve iksiri seçmek için gdirs. İlk fikrim, dizin yığınının tüm sekmeler arasında paylaşılmasını sağlamak ve yeni sekmeden sonra cd ~ 1 yapmaktı, ancak her bir zsh örneğinin kendine ait gibi göründüğü gibi, bunun nasıl yapılacağını bulamıyorum. Tarih paylaşımı ortak bir dosyadan geçiyor, bu yüzden burada da yapılabilir.


0

Bu şekilde bash yaparsınız.

Bu kabuk betiği (tam anlamıyla sessiz, Applescript kullanarak) Terminal.app'e yeni bir sekme açmasını ve ardından geçerli dizine geçmesini söyleyecektir:

#!/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

… Yukarıdaki kabuk betiğini bir dizinde $PATH(/ / usr / local / bin) yazın ve çalıştırılabilir olduğundan emin olun:

$ chmod +x /usr/local/bin/nt

( kaynak )


Mac OS X Lion 10.7'den itibaren, Terminal'in varsayılan olarak önceki sekmeyle aynı çalışma dizininde yeni sekmeler başlatacağını unutmayın. Yani sadece sekmeyi şimdi oluşturmak için düzenleme yapmanız gerekir. (Bash kullanıyorsanız. Başka bir kabuk kullanıyorsanız, Terminal'e mevcut çalışma dizini hakkında nasıl bilgi vereceğinizi öğrenmek için / etc / bashrc içindeki koda bakın.)
Chris Page

0

Şu anda bu yeni sekmeyi açmanız gerekirse, yapılandırma dosyalarınızı değiştirmeden veya yeni eklentiler yüklemeden, şunu çalıştırın:

pwd | pbcopy

Ardından manuel olarak (withT ile) ve yeni sekmede yeni bir Terminal sekmesi açın:

cd "`pbpaste`"

Uyarı : bu sistem panosunun içeriğinin üzerine yazacaktır.


Panoya yazmayan alternatif, daha uzun bir yöntem:

pwd > $TMPDIR/wd

Yeni sekmenizi açın.

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

0

Eklenti plugins=(git osx)yüklendikten sonra Pieter'in yorumuna göre , sadece yazabilirsiniz tabve bu dizininizde yeni bir sekme açacaktır.


0

Yeni bir sekme açıldığında dizinin otomatik olarak değişmesini istiyorsanız, dirpersist eklentisini kullanın .

Osx eklentisi sadece son dizini kaydeder tab, ancak her zaman mümkün olmayan yeni bir sekme açmak için komutu çalıştırmanız gerekir (eğer mevcut sekmenizde bir şey çalıştırıyorsanız).


0

.Zshrc'ye terminalapp eklemek benim için işe yaramadı, bu yüzden eklentiyi aradım ~/.oh-my-zsh/plugins/terminalappve bana şunu söyledi:

# 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

Yeni sekmeler aynı klasörde zaten açık (Cmd + T). Yeni pencereler için (Cmd + N) Pieter’in çözümü doğru:

Tercihler> Profiller> Varsayılan> Genel> Çalışma Dizini> Önceki oturumun dizin seçeneğini yeniden kullan

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.