Buka tab baru di direktori yang sama

41

Katakanlah Anda berada di folder / sangat / keren / dan / dalam / bersarang /. Dan Anda ingin membuka tab terminal baru di folder yang sama.

Bagaimana Anda melakukannya?

Saya menggunakan Mac OS dan Zsh.

Nerian
sumber

Jawaban:

62

Gunakan Oh-My-Zsh dan tambahkan plugin 'osx' di ~ / .zshrc Anda seperti:

plugins=(osx)

Jika Anda menggunakan Aplikasi Terminal OSX, Anda juga perlu menambahkan terminalappplugin juga: kredit

plugins=(osx terminalapp)

Jika Anda menggunakan iTerm, Anda perlu mengatur opsi konfigurasi ( Perhatikan bahwa Anda mungkin tidak memerlukan plugin zsh agar ini berfungsi ): kredit

Preferensi> Profil> Default> Umum> Direktori Kerja> Gunakan kembali opsi direktori sesi sebelumnya

Pembaruan panel Preferensi iTerm2 untuk menggunakan kembali direktori sesi sebelumnya.

Itu semua yang perlu Anda lakukan!

Pieter
sumber
1
apakah ini juga berfungsi di iTerm?
ahmy
1
@ahmy sepertinya sudah seharusnya: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/osx/…
philfreo
2
Ini berfungsi untuk saya kecuali saya sedang menjalankan proses di konsol. Jika saya memiliki proses, katakanlah railsrunning, dan saya mencoba membuka jendela baru melalui command-n, saya kembali ke direktori home saya.
YWCA Halo
@YWCAHo sudahkah Anda menemukan solusi untuk masalah ini?
Michał Miszczyszyn
@Miszy Saya pindah kembali ke vanilla Bash: /
YWCA Halo
23

Opsi lain yang sekarang tersedia di Mac OS X Lion adalah menggunakan fitur bawaan. Ini menggunakan 'escape sequence' untuk mencari tahu direktori saat ini. Bagi saya ini berfungsi jika saya menggunakan perintah ini di .zshrc saya:

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

dimungkinkan juga untuk menggunakan PS1(untuk Bash, dari wiki ini ):

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

di mana \e]2;urutan pelarian untuk mencetak hal-hal di batang judul. Ini tampaknya yang Terminal.app semakin informasinya dari sana.

Informasi lebih lanjut:

Tim
sumber
juga, saya pikir oh-my-zsh memiliki ini secara default. Saya telah menggunakan ini selama seminggu atau lebih sekarang dan itu bekerja cukup banyak di luar kotak.
Tim
Pada Mac OS X Lion 10.7, Terminal akan menampilkan direktori yang berfungsi menggunakan ikon "proxy" di bilah judul, memiliki opsi untuk membuat terminal baru di direktori yang sama, dan mendukung terminal Pengembalian. Sebagai kenyamanan, Terminal akan melihat isi judul jendela / tab untuk melihat apakah mereka mengandung nama path yang valid. Namun, dalam /etc/bashrcAnda akan melihat bahwa itu juga mendukung kode pelarian baru untuk menginformasikan Terminal direktori kerja menggunakan file:URL, yang dapat menangani semua nama path yang valid melalui persen-encoding (judul jendela / tab hanya dapat berisi subset karakter ASCII ).
Chris Page
2
Urutan melarikan diri untuk mengatur direktori kerja adalah kode dasar yang sama seperti untuk mengatur judul — Operating System Command (OSC) —dengan kode 7 alih-alih 0-2:\e]7;file://hostname/percent-encoded-pathname\a
Chris Page
3
Mengapa menggunakan precmd dan preexec? Kenapa tidak adil chpwd () {print -Pn "\e]2; %~/ \a"}?
Nick
1
Saya mengerti bagaimana ini memperbarui bilah judul, tapi saya tidak mengerti bagaimana ini menyebabkan tab baru dibuka di direktori yang sama dengan tab sebelumnya.
mareoraft
3

Ini adalah versi yang sangat sederhana yang saya gunakan di bash dan juga berfungsi di zsh. Ini menyimpan folder saat ini dalam file, setelah setiap perintah (Tidak menyakiti IMO terlalu banyak) dan membuka terminal baru di folder saat ini disimpan.

tambahkan berikut ini ke .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)"
mjspier
sumber
Ini keren tapi mengharuskan Anda untuk benar-benar menjalankan perintah di tab untuk memperbarui. Ini dalam kasus yang jarang dapat menyebabkan perilaku yang tidak terduga. Mungkin ada fungsi lain yang bisa kita gunakan yang terpicu saat Anda mengganti tab alih-alih menjalankan perintah?
mareoraft
1

gdir sepertinya merupakan cara untuk melakukannya: tab baru, lalu gdir untuk memilih direktori yang dalam dan voila. Ide pertama saya adalah membuat tumpukan direktori dibagi di antara semua tab dan melakukan cd ~ 1 setelah tab baru, tetapi saya tidak dapat menemukan cara melakukannya, karena tampaknya setiap instance zsh menyimpannya sendiri. Berbagi riwayat berjalan melalui file umum, jadi mungkin itu bisa dilakukan di sini juga ...

Henno
sumber
0

Ini adalah bagaimana kamu melakukannya di bash.

Script shell ini akan memberitahu (diam secara harfiah, menggunakan Applescript) Terminal.app untuk membuka tab baru kemudian beralih ke direktori saat ini:

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

... letakkan skrip shell di atas dalam direktori di $PATH(yaitu / usr / local / bin) dan pastikan itu dapat dieksekusi:

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

( sumber )

Nifle
sumber
Perhatikan bahwa pada Mac OS X Lion 10.7, secara default Terminal akan memulai tab baru di direktori kerja yang sama dengan tab sebelumnya. Jadi, Anda hanya perlu mengatur untuk membuat tab sekarang. (Jika Anda menggunakan bash. Jika Anda menggunakan shell lain, lihat kode di / etc / bashrc untuk mengetahui terminal tentang direktori kerja saat ini.)
Chris Page
0

Jika Anda perlu membuka tab baru ini sekarang, tanpa mengubah file konfigurasi Anda atau menginstal plugin baru, jalankan ini:

pwd | pbcopy

Kemudian buka tab Terminal baru secara manual (dengan ⌘T), dan di tab baru:

cd "`pbpaste`"

Peringatan : ini akan menimpa isi clipboard sistem.


Metode alternatif yang lebih panjang yang tidak menimpa clipboard:

pwd > $TMPDIR/wd

Buka tab baru Anda.

cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd
Rory O'Kane
sumber
0

Per komentar Pieter di atas, setelah plugins=(git osx)plugin diinstal, Anda bisa mengetik tabdan itu akan membuka tab baru di direktori Anda saat ini.

Kasus
sumber
0

Jika Anda ingin direktori berubah secara otomatis ketika tab baru dibuka gunakan plugin dirpersist .

Plugin osx hanya menyimpan direktori terakhir tetapi Anda harus menjalankan perintah tabuntuk membuka tab baru, yang tidak selalu mungkin (jika, katakanlah, Anda menjalankan sesuatu di tab Anda saat ini).

garasiàtrois
sumber
0

Menambahkan terminalapp ke .zshrc tidak berfungsi untuk saya, jadi saya mencari plugin ~/.oh-my-zsh/plugins/terminalappdan memberitahu saya:

# 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.
Steve Root
sumber
0

Tab baru sudah terbuka di folder yang sama (Cmd + T). Untuk windows baru (Cmd + N) solusi dari Pieter benar:

Preferensi> Profil> Default> Umum> Direktori Kerja> Gunakan kembali opsi direktori sesi sebelumnya

Punnerud
sumber