วิธีการสร้างหน้าต่างใหม่ในไดเรกทอรีปัจจุบันใน tmux?


208

เป็นไปได้หรือไม่ที่จะเปิด a new-windowด้วยไดเร็กทอรีการทำงานที่ตั้งค่าเป็นไดเร็กทอรีที่ฉันกำลังใช้อยู่ฉันกำลังใช้zshหากมีความสำคัญ

คำตอบ:


139

เริ่มต้นในtmux 1.9 default-pathตัวเลือกจะถูกลบออกดังนั้นคุณจำเป็นต้องใช้-cตัวเลือกด้วยnew-windowและsplit-window(เช่น rebinding c, "และ%ผูกที่จะรวม
-c '#{pane_current_path}') ดูคำตอบอื่น ๆ ของคำถามนี้สำหรับรายละเอียด


คุณลักษณะที่เกี่ยวข้องที่ดินในtmuxลำต้น SVN ในช่วงต้นเดือนกุมภาพันธ์ 2012 ในtmuxสร้างที่มีรหัสนี้tmuxผูกที่สำคัญที่ก่อให้เกิดnew-windowจะสร้างใหม่หน้าต่างที่มีไดเรกทอรีที่ทำงานเดียวกันปัจจุบันเป็นกระบวนการที่ใช้งานบานหน้าต่างปัจจุบัน (ตราบใดที่default-pathเซสชั่น ตัวเลือกว่างเปล่ามันเป็นค่าเริ่มต้น) เช่นเดียวกับบานหน้าต่างที่สร้างโดยsplit-windowคำสั่งเมื่อถูกเรียกผ่านการเชื่อม

สิ่งนี้ใช้รหัสเฉพาะแพลตฟอร์มเพื่อให้รองรับเฉพาะบางระบบปฏิบัติการในเวลานี้: ดาร์วิน (OS X), FreeBSD, Linux, OpenBSD และ Solaris

สิ่งนี้ควรจะมีอยู่ในtmuxรุ่นถัดไป(1.7?)


ด้วยtmux 1.4 ฉันมักจะใช้

tmux neww

ในเชลล์ที่มีไดเร็กทอรีการทำงานปัจจุบันที่ต้องการอยู่แล้ว

อย่างไรก็ตามหากฉันคาดหวังว่าจะต้องสร้างหลายหน้าต่างด้วยไดเรกทอรีการทำงานปัจจุบันเดียวกัน (หรือฉันต้องการเริ่มต้นด้วยการcผูกคีย์<prefix> ปกติ) จากนั้นฉันจะตั้งค่าdefault-pathตัวเลือกเซสชันผ่าน

tmux set-option default-path "$PWD"

ในเชลล์ที่มีไดเรกทอรีการทำงานปัจจุบันที่ต้องการอยู่แล้ว (แม้ว่าคุณสามารถทำได้อย่างชัดเจนจากไดเรกทอรีใด ๆ และเพียงแค่ระบุค่าแทน)

หากdefault-pathมีการตั้งค่าให้เป็นค่าที่ไม่ว่างเปล่าค่าของมันจะถูกนำมาใช้แทน“สืบทอด” tmux newwไดเรกทอรีการทำงานปัจจุบันจากการสวดบรรทัดคำสั่งของ

tmuxคำถามที่พบบ่อยมีรายการชื่อ“ฉันสามารถเปิดหน้าต่างใหม่ในไดเรกทอรีเดียวกันกับหน้าต่างปัจจุบัน?” ที่อธิบายถึงวิธีการอื่น มันค่อนข้างซับซ้อนแม้ว่า


6
มีวิธีที่ฉันสามารถแมป<prefix>cเพื่ออ่านไดเรกทอรีการทำงานของอินสแตนซ์เปลือกพื้นฐาน (ถ้ามี) และการตั้งค่าก่อนที่จะมีการดำเนินการdefault-path new-windowหรือเป็นที่มากเกินไปที่จะขอจากtmux :)
Shrikant Sharat

ในบันทึกอื่นเป็นไปได้ไหมที่จะอ่านไดเรกทอรีการทำงานของเชลล์ต้นแบบ? ฉันจะฆ่าเพื่อให้มันปรากฏในแถบสถานะของฉัน
Shrikant Sharat

2
ไม่มีวิธีพกพาในการแยก cwd ของกระบวนการอื่น (แม้ว่ามันจะเป็นไปได้ในบางแพลตฟอร์ม (เช่น/proc/PID/cwdบน Linux)) มีวิธีแก้ปัญหาบางส่วนที่เป็นไปได้ในรายการของtmux FAQ (มีเชลล์บันทึก cwd เมื่อพิมพ์พรอมต์จากนั้นผูกคีย์ที่เริ่มเชลล์ใหม่ในไดเร็กทอรีที่บันทึก)
Chris Johnsen

ตกลงนี่เป็นขอบเขตของความรู้ของฉันและไม่น่าเชื่อถือมากนัก มีบางอย่างบอกฉันว่าฉันอาจจะดีกว่านี้ถ้าไม่มีทั้งหมด .. ขอบคุณ
Shrikant Sharat

1
@paradroid: สิ่งใดที่ทำผ่านการเชื่อมโยง (โดยค่าเริ่มต้น) จะใช้ cwd ของเซิร์ฟเวอร์tmuxหรือค่าของdefault-pathตัวเลือกเซสชัน (ถ้าตั้งค่าไว้) tmux คำถามที่พบบ่อยมีรายการที่อธิบายถึงวิธีการผูกที่สำคัญที่จะเริ่มต้นหน้าต่างใหม่กับ CWD ของเปลือกทำงานในหน้าต่างปัจจุบันที่หนึ่ง (“ฉันสามารถเปิดหน้าต่างใหม่ในไดเรกทอรีเดียวกันกับหน้าต่างปัจจุบัน?”) แต่วิธีการนี้ค่อนข้างซับซ้อน อาจทำเช่นเดียวกันสำหรับsplit-windowและnew-session(แทนneww)
Chris Johnsen

268

ปัจจุบัน (1.9a) Tmux หน้าคนแสดงรายการเลือก-c start-directoryพารามิเตอร์สำหรับคำสั่งบางอย่างรวมถึงและnew-window split-windowนอกจากนี้ยังมีตัวแปรรูปแบบซึ่งหมายถึงpane_current_path Current path if available

โดยการรวมเหล่านี้เราสามารถเปิดหน้าต่างใหม่กับไดเรกทอรีการทำงานปัจจุบันโดยใช้
new-window -c "#{pane_current_path}"
ใบเสนอราคาที่จำเป็นในกรณีที่เส้นทางปัจจุบันมีช่องว่าง

หากคุณต้องการที่จะแยกบานหน้าต่างปัจจุบันแนวตั้งใช้
split-window -c "#{pane_current_path}"
หรือสำหรับการแยกแนวนอน
split-window -h -c "#{pane_current_path}"

.tmux.confเพื่อให้ผูกที่สำคัญเปิดแยกและหน้าต่างใหม่กับไดเรกทอรีการทำงานปัจจุบันโดยค่าเริ่มต้นเพิ่มต่อไปนี้ของคุณ "ด้วยคำพูดรอบคือการบอก Tmux ก็ไม่ควรเริ่มต้นสตริง แต่ผูก"สำคัญ

bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"

1
มันใช้งานไม่ได้กับ tmux 1.9 หรือไม่? ฉันไม่สามารถทำสิ่งที่คาดหวังได้
Erik Garrison

1
bind-key -r ป้อน new-window -c "# {pane_current_path}", ใช้งานได้กับ tmux 2.1
Marslo

5
ทำงานใน tmux 2.3 บน OSX อย่าลืมหยุด / ฆ่าเซสชันที่มีอยู่ทั้งหมดเพื่อดูการเชื่อมโยงเหล่านี้ที่ใช้
jmgarnier

1
@jmgarnier หรือหาแหล่งโปรไฟล์: prefix- :จากนั้นพิมพ์source ~/.tmux.conf
ijoseph

8
@jmgarnier tmux source-file .tmux.confหรือเพียงแค่
Blauhirn

37

new-window -c "#{pane_current_path}"ใช่ใช้ คุณสามารถเพิ่มสิ่งต่อไปนี้ในของคุณ~/.tmux.confเพื่อทำให้เป็นแบบถาวร (สมมติว่าการโยงคีย์เริ่มต้น):

bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

default-pathการตั้งค่าเส้นทางถูกลบออกจากรหัสและ tmux ต้นน้ำเขียนแนะนำในการกระทำข้อความว่าการใช้อย่างใดอย่างหนึ่ง-c "#{pane_current_path}"หรือ-c "$PWDในnew-windowและsplit-windowคำสั่ง

ฉันยังตอบคำถามซ้ำซ้อนนี้ด้วย


10

ด้วย tmux เวอร์ชันล่าสุด (v1.8 แต่อาจเป็น v1.7 ด้วย):

tmux new-window -c "$PWD"

สิ่งนี้ดูเหมือนว่าจะทำงานกับหน้าต่างแบบแยกเช่นกันเช่นtmux split-window -v -c "$PWD"
user7089

3
$PWDไม่ทำงานสำหรับฉันใน tmux 1.9a ฉันต้องใช้pane_current_pathตามที่แนะนำข้างต้น
jordelver

3

คำตอบอื่น ๆ ไม่ทำงานสำหรับฉันเมื่อฉันลองทำให้พวกเขาเป็นผูก (เฉพาะtmux split-window -c) แต่ฉันได้สร้างโซลูชันของฉันเองที่ฉันใช้มานานกว่าหนึ่งปีซึ่งเหมาะกับทั้งหน้าต่างใหม่และการแยก:

~/.bashrc:

PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

~/.tmux.conf:

unbind-key c
bind-key c run-shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key C new-window

bind-key - run-shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key | run-shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"

ใช้งานได้อย่างน้อยกับ $ (tmux -V) 1.8 ดูบรรทัดที่แสดงความคิดเห็นได้ที่นี่สำหรับเวอร์ชันที่ใช้กับ tmux ที่เก่ากว่าซึ่งไม่มีคำสั่ง show-environment


0

tmux ทำเช่นนั้นในรุ่น 1.8 แต่ใน 1.9 คุณสมบัตินี้ถูกลบออกไปโดยใช้การ-cตั้งค่าสถานะ

สิ่งนี้สามารถแก้ไขได้ แต่มีผลผูกพันใหม่new-windowแต่ในกรณีที่คุณต้องการเรียกใช้งานอย่างอื่นมันจะกลายเป็นเรื่องที่พูดมากเกินไป: แทนที่จะพิมพ์neww man tmuxคุณจะต้องพิมพ์neww -c "#{pane_current_path}" man tmuxที่คุณอาจไม่ต้องการทำ

มี modux ของ tmux (ฉันเป็นผู้เขียน) เพื่อเพิ่มภาษาสคริปต์ที่เหมาะสมใน tmux เพื่ออนุญาตให้ใช้นามแฝง, ผูกหลายคำสั่งใน 'โหมด', ตัวแปร, ลูป, ฯลฯ ... และยังนำพฤติกรรมกลับมา : หน้าต่างและบานหน้าต่างใหม่จะเปิดขึ้นในไดเรกทอรีปัจจุบัน

สามารถสร้างได้จากแหล่งข้อมูลที่นี่: http://ershov.github.io/tmux/

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