เปิดแท็บใหม่ในไดเรกทอรีเดียวกัน


41

สมมติว่าคุณอยู่ใน / very / cool / และ / deep / ซ้อนกัน / โฟลเดอร์ และคุณต้องการเปิดแท็บเทอร์มินัลใหม่ในโฟลเดอร์เดียวกัน

คุณจะทำอย่างไร

ฉันใช้ Mac OS และ Zsh

คำตอบ:


62

ใช้Oh-My-Zshและเพิ่มปลั๊กอิน 'osx' ใน ~ / .zshrcของคุณเช่น:

plugins=(osx)

หากคุณใช้แอป Terminal ของ OSX คุณต้องเพิ่มterminalappปลั๊กอินด้วย: credit

plugins=(osx terminalapp)

หากคุณใช้ iTerm คุณต้องตั้งค่าตัวเลือกการกำหนดค่า ( โปรดทราบว่าคุณไม่จำเป็นต้องใช้ปลั๊กอิน zsh เพื่อให้การทำงาน ): เครดิต

การตั้งค่า> โปรไฟล์> ค่าเริ่มต้น> ทั่วไป> ไดเรกทอรีการทำงาน> ใช้ตัวเลือกไดเรกทอรีของเซสชันก่อนหน้าอีกครั้ง

การปรับปรุงแผงการตั้งค่า iTerm2 เพื่อนำไดเรกทอรีเซสชันก่อนหน้านี้

นั่นคือทั้งหมดที่คุณต้องทำ!


1
ยังใช้งานได้กับ iTerm ด้วยหรือไม่
ahmy

1
@ahmy ดูเหมือนว่าควรจะ: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/osx/…
philfreo

2
สิ่งนี้ใช้ได้กับฉันเว้นแต่ว่าฉันกำลังเรียกใช้กระบวนการในคอนโซล หากฉันมีกระบวนการให้พูดว่าrailsกำลังทำงานและฉันพยายามเปิดหน้าต่างใหม่ผ่าน command-n ฉันจะกลับมาที่ไดเรกทอรีหลักของฉัน
YWCA สวัสดี

@YWCAHello คุณพบวิธีแก้ปัญหานี้หรือไม่
Michał Miszczyszyn

@Miszy ฉันย้ายกลับไปที่วานิลลา Bash: /
YWCA สวัสดี

23

ขณะนี้มีตัวเลือกอื่นใน Mac OS X Lion กำลังใช้งานคุณลักษณะในตัว มันใช้ 'escape sequences' เพื่อค้นหาไดเร็กทอรีปัจจุบัน สำหรับฉันมันใช้งานได้ถ้าฉันใช้คำสั่งเหล่านี้ใน. 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 sequence จะพิมพ์สิ่งต่าง ๆ ในแถบหัวเรื่อง มันดูเหมือนว่า Terminal.app จะได้รับข้อมูลมาจากที่นั่น

ข้อมูลมากกว่านี้:


นอกจากนี้ฉันคิดว่าoh-my-zshมีสิ่งนี้ตามค่าเริ่มต้น ฉันได้ใช้สิ่งนี้มาเป็นเวลาหนึ่งสัปดาห์หรือมากกว่านี้และมันใช้งานได้ดีมาก
ทิม

ในฐานะของ Mac OS X Lion 10.7 เทอร์มินัลจะแสดงไดเรกทอรีทำงานโดยใช้ไอคอน“ พร็อกซี” ในแถบชื่อเรื่องมีตัวเลือกในการสร้างเทอร์มินัลใหม่ในไดเรกทอรีเดียวกันและรองรับการทำงานต่อเทอร์มินัล เทอร์มินัลจะดูเนื้อหาของชื่อหน้าต่าง / แท็บเพื่อดูว่ามีชื่อพา ธ ที่ถูกต้องหรือไม่ อย่างไรก็ตามใน/etc/bashrcคุณจะเห็นว่ามันยังรองรับรหัสหลบหนีใหม่สำหรับแจ้งเทอร์มินัลของไดเรกทอรีการทำงานโดยใช้file:URL ซึ่งสามารถจัดการชื่อพา ธ ที่ถูกต้องทั้งหมดได้ด้วยการเข้ารหัสเปอร์เซ็นต์ (ชื่อหน้าต่าง / แท็บสามารถมีชุดอักขระ ASCII ได้ )
Chris หน้า

2
ลำดับการหลีกเลี่ยงสำหรับการตั้งค่าไดเรกทอรีทำงานเป็นรหัสพื้นฐานเดียวกับการตั้งชื่อ - ระบบปฏิบัติการคำสั่ง (OSC) - ด้วยรหัส 7 แทน 0-2:\e]7;file://hostname/percent-encoded-pathname\a
Chris Page

3
ทำไมต้องใช้ precmd และ preexec ทำไมไม่เป็นเช่นนั้นchpwd () {print -Pn "\e]2; %~/ \a"}?
Nick

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ดูเหมือนจะเป็นวิธีที่เกือบจะทำ: แท็บใหม่แล้ว gdirs เพื่อเลือกไดเรกทอรีลึกและ voila ความคิดแรกของฉันคือการทำให้ไดเรกทอรีสแต็กร่วมกันระหว่างแท็บทั้งหมดและทำ 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 โดยค่าเริ่มต้นเทอร์มินัลจะเริ่มแท็บใหม่ในไดเรกทอรีการทำงานเดียวกันกับแท็บก่อนหน้า ดังนั้นคุณจะต้องจัดเรียงเพื่อสร้างแท็บทันที (หากคุณกำลังใช้ bash หากคุณใช้เชลล์อีกตัวให้ดูที่รหัสใน / etc / bashrc เพื่อดูวิธีบอก Terminal เกี่ยวกับไดเรกทอรีทำงานปัจจุบัน)
Chris Page

0

หากคุณต้องการเปิดแท็บใหม่นี้ทันทีโดยไม่ต้องเปลี่ยนไฟล์กำหนดค่าหรือติดตั้งปลั๊กอินใหม่ให้รันดังนี้

pwd | pbcopy

จากนั้นเปิดแท็บ Terminal ใหม่ด้วยตนเอง (ด้วย⌘T) และในแท็บใหม่:

cd "`pbpaste`"

คำเตือน : สิ่งนี้จะเขียนทับเนื้อหาของคลิปบอร์ดของระบบ


อีกทางเลือกหนึ่งอีกต่อไปวิธีการที่ไม่เขียนทับคลิปบอร์ด:

pwd > $TMPDIR/wd

เปิดแท็บใหม่ของคุณ

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

0

ตามความคิดเห็นของ Pieter ด้านบนเมื่อ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) สำหรับ windows ใหม่ (Cmd + N) ทางออกจาก Pieter นั้นถูกต้อง:

การตั้งค่า> โปรไฟล์> ค่าเริ่มต้น> ทั่วไป> ไดเรกทอรีการทำงาน> ใช้ตัวเลือกไดเรกทอรีของเซสชันก่อนหน้าอีกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.