Tmux ลืมไดเร็กทอรีที่สร้างเซสชัน


8

เมื่อฉันสร้างหลายเซสชันใน tmux ไดเร็กทอรีปัจจุบันสำหรับทุกหน้าต่างใหม่ในเซสชันถัดมาจะถูกตั้งค่าเป็นไดเร็กทอรีปัจจุบันสำหรับอันแรก

ตัวอย่างเช่น:

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"

ฉันจะบังคับให้ tmux ตั้งค่าไดเร็กทอรีปัจจุบันสำหรับทุกหน้าต่างใหม่ในเซสชันถัดมาเป็นไดเร็กทอรีที่สร้างเซสชันได้อย่างไร?

tmux 1.6

zsh 4.3

คำตอบ:


21

ในฐานะของ tmux 1.9 ตัวเลือกเริ่มต้นเส้นทางได้ถูกลบออก

คุณสามารถใช้สิ่งต่อไปนี้เพื่อเปิดในไดเรกทอรีที่เปิดใน ('ลูกค้า' ในชื่อจะบอกฉันว่ามันเป็น tmux runnin ปัจจุบันในเชลล์ของคุณ แต่ดูเหมือนว่าจะสลับเส้นทางเมื่อสลับระหว่างเซสชันใน ลูกค้าเดิม):

bind-key c  new-window -c "#{client_cwd}"

มิฉะนั้นเพื่อคัดลอกพา ธ ของบานหน้าต่างปัจจุบัน:

bind-key c  new-window -c "#{pane_current_path}"

นอกจากนี้ยังมี pane_start_path ซึ่งอาจดึงดูดกระแสงานบางอย่าง

bind-key c  new-window -c "#{pane_start_path}"

สำหรับคำสั่งแบ่งหน้าต่าง

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

1
นี่คือคำตอบที่ถูกต้อง ตัวเลือกที่ 2 โดยเฉพาะในกรณีของฉัน
Mike Rapadas

อย่าลืมปิดเทอร์มินัล tmux ที่ทำงานอยู่ในปัจจุบันทั้งหมดรวมถึงพื้นหลังก่อนที่จะ chaning ไฟล์กำหนดค่าของคุณมิฉะนั้น tmux จะไม่โหลดการกำหนดค่าใหม่
randomness2077

@lightmanhk คุณควรจะสามารถ: source ~ / .tmux.conf
David C. Bishop

1
มีวิธีใดที่จะทำให้เป็นเรื่องทั่วไปสำหรับการแยกบานหน้าต่าง split-window -h "#{pane_current_path}"จะไม่ทำงาน ...
Bach

1
@Bach ลองด้วย -c split-window -h -c "#{pane_current_path}"
ดาวิดซี. บิชอป

3

ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่เป็นหนึ่งในคำถามเดียวใน StackExchange เมื่อฉันค้นหาคำตอบด้วยตัวเองดังนั้นนี่คือวิธีที่ฉันแก้ไขสำหรับ tmux 1.8

new-windowคำสั่งยิง-cธงที่จะช่วยให้คุณสามารถระบุไดเรกทอรีปัจจุบันของหน้าต่างใหม่ โดยค่าเริ่มต้นมันเป็นสตริงที่ว่างเปล่าซึ่งจะใช้ไดเรกทอรีการทำงานบานหน้าต่างปัจจุบันเป็นไดเรกทอรีสำหรับหน้าต่างใหม่ การส่งผ่านค่า a -สำหรับค่า-cสถานะจะตั้งค่าไดเรกทอรีของหน้าต่างใหม่เป็นสิ่งที่เปิดเซสชัน

นี่คือข้อความที่ตัดตอนมาจากเอกสาร:

-c specifies the working directory in which the new window is created.  It may 
have an absolute path or one of the following values (or a subdirectory):

       Empty string    Current pane's directory
       ~               User's home directory
       -               Where session was started
       .               Where server was started

หากคุณต้องการเปลี่ยนพฤติกรรมเริ่มต้นของการ<PREFIX> cผูกกุญแจเพื่อสะท้อนสิ่งนี้นี่คือสิ่งที่ฉันทำใน~/.tmux.conf:

bind-key c   new-window -c -

0

มีคำตอบที่นี่: /unix/12032/create-new-window-with-current-directory-in-tmux

สรุป:

จาก tmux FAQ วิธีหนึ่ง (แต่ค่อนข้างธรรมดาและค่อนข้างอิสระเชลล์) ของป้าน:

  • ฉันจะเปิดหน้าต่างใหม่ในไดเรกทอรีเดียวกันกับหน้าต่างปัจจุบันได้อย่างไร

ทางเลือกหนึ่งคือเรียกใช้ "TMUX = tmux" ในหน้าต่าง อย่างไรก็ตามจะใช้งานได้หากไม่มีคำสั่งที่ทำงานอยู่ดังนั้นคุณจึงสามารถป้อนคำสั่งได้

วิธีแก้ปัญหาคือให้ tmux ทราบเกี่ยวกับเส้นทางปัจจุบันผ่านตัวแปรสภาพแวดล้อม หากต้องการทำเช่นนั้นให้ใช้คำสั่งต่อไปนี้:

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD

ซึ่งตั้งค่า TMUXPWD_i (โดยที่ i คือหมายเลขของหน้าต่างปัจจุบัน) ไปยังพา ธ ของไดเร็กทอรีปัจจุบัน คำสั่งนี้สามารถเพิ่มลงใน PS1 ได้เช่น:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

เมื่อหน้าต่างใหม่ถูกสร้างขึ้นเชลล์ควรถูกขอให้เปลี่ยนไดเรกทอรี คุณสามารถกำหนดการผูกใหม่ (ตัวอย่างเช่นถ้าใช้ GNU bash):

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

วิธีการแก้ปัญหานี้จะทำงานแม้ว่าคำสั่งจะทำงานใน terminal แต่มันจะไม่ทำงานจากหน้าต่างที่เพิ่งถูกสลับกับอีกเพราะ TMUXPWD_i จะไม่ได้รับการปรับปรุงหลังจากการแลกเปลี่ยน อย่างไรก็ตามเมื่อพร้อมต์ใหม่ปรากฏขึ้น TMUXPWD_i จะถูกอัพเดตอย่างถูกต้อง

เพียงแทนที่การโทรไปยังเชลล์ตามความเหมาะสมสำหรับคุณ

ยังเห็นได้ชัดว่าเวอร์ชันใหม่กว่าของ tmux ได้ระบุสิ่งนี้ด้วยคำสั่ง

tmux หน้าต่างใหม่

รุ่นเก่าถูกอ้างสิทธิ์ว่าใช้งานได้:

โทร

tmux neww

จากเชลล์ของคุณจะเปิด tmux ใน dir นั้น

หากคุณต้องการที่จะเปิดหน้าต่างใหม่หรือบานหน้าต่างจากไดเรกทอรีการทำงานปัจจุบันใน tmux คุณควรแทน:

tmux set-option default-path "$ PWD"


ขอขอบคุณสำหรับความพยายามที่จะช่วยเหลือวอลรัส ฉันเห็นคำถามนั้นใน unix.stackexchange และอ่านคำถามที่พบบ่อย อย่างไรก็ตามสิ่งเหล่านี้ไม่ใช่คำตอบสำหรับคำถามของฉัน
Shamaoke

1
ดูเมื่อคุณสร้างเซสชันใหม่ไดเรกทอรีปัจจุบันสำหรับหน้าต่างใหม่ทุกหรือบานหน้าต่างที่คุณเปิดในเซสชั่นที่จะเป็นไดเรกทอรีที่ที่คุณเริ่มเซสชั่น นี่เป็นเรื่องจริงถ้าฉันสร้างเซสชันเดียว อย่างไรก็ตามเมื่อฉันเปิดหน้าต่างเทอร์มินัลใหม่และเริ่มอีกหนึ่งเซสชันในนั้นไดเรคทอรี่การทำงานปัจจุบันสำหรับทุกหน้าต่างใหม่จะเป็นไดเรกทอรีที่ฉันเริ่มเซสชั่นแรกแต่ไม่ใช่ในปัจจุบัน เห็นได้ชัดว่านี่เป็นข้อผิดพลาดใน tmux 1.6 ตั้งแต่เมื่อฉันลดระดับเป็นรุ่น 1.3 ข้อผิดพลาดไม่ปรากฏขึ้น
Shamaoke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.