เป็นไปได้หรือไม่ที่จะเปิด a new-window
ด้วยไดเร็กทอรีการทำงานที่ตั้งค่าเป็นไดเร็กทอรีที่ฉันกำลังใช้อยู่ฉันกำลังใช้zshหากมีความสำคัญ
เป็นไปได้หรือไม่ที่จะเปิด a new-window
ด้วยไดเร็กทอรีการทำงานที่ตั้งค่าเป็นไดเร็กทอรีที่ฉันกำลังใช้อยู่ฉันกำลังใช้zshหากมีความสำคัญ
คำตอบ:
เริ่มต้นใน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คำถามที่พบบ่อยมีรายการชื่อ“ฉันสามารถเปิดหน้าต่างใหม่ในไดเรกทอรีเดียวกันกับหน้าต่างปัจจุบัน?” ที่อธิบายถึงวิธีการอื่น มันค่อนข้างซับซ้อนแม้ว่า
/proc/PID/cwd
บน Linux)) มีวิธีแก้ปัญหาบางส่วนที่เป็นไปได้ในรายการของtmux FAQ (มีเชลล์บันทึก cwd เมื่อพิมพ์พรอมต์จากนั้นผูกคีย์ที่เริ่มเชลล์ใหม่ในไดเร็กทอรีที่บันทึก)
default-path
ตัวเลือกเซสชัน (ถ้าตั้งค่าไว้) tmux คำถามที่พบบ่อยมีรายการที่อธิบายถึงวิธีการผูกที่สำคัญที่จะเริ่มต้นหน้าต่างใหม่กับ CWD ของเปลือกทำงานในหน้าต่างปัจจุบันที่หนึ่ง (“ฉันสามารถเปิดหน้าต่างใหม่ในไดเรกทอรีเดียวกันกับหน้าต่างปัจจุบัน?”) แต่วิธีการนี้ค่อนข้างซับซ้อน อาจทำเช่นเดียวกันสำหรับsplit-window
และnew-session
(แทนneww
)
ปัจจุบัน (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}"
prefix
- :
จากนั้นพิมพ์source ~/.tmux.conf
tmux source-file .tmux.conf
หรือเพียงแค่
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
คำสั่ง
ฉันยังตอบคำถามซ้ำซ้อนนี้ด้วย
คำตอบอื่น ๆ ไม่ทำงานสำหรับฉันเมื่อฉันลองทำให้พวกเขาเป็นผูก (เฉพาะ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
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/
<prefix>c
เพื่ออ่านไดเรกทอรีการทำงานของอินสแตนซ์เปลือกพื้นฐาน (ถ้ามี) และการตั้งค่าก่อนที่จะมีการดำเนินการdefault-path
new-window
หรือเป็นที่มากเกินไปที่จะขอจากtmux :)