ฉันจะผูกคำสั่ง tmux หลายคำสั่งกับการกดแป้นเดียวได้อย่างไร


13

โดยเฉพาะฉันพยายามแจ้งเตือนหลังจากคำสั่งบางอย่างเสร็จสมบูรณ์ ตัวอย่างเช่นถ้าฉันโหลดไฟล์กำหนดค่าใหม่ฉันต้องการได้รับการยืนยันว่าใช้งานได้ซึ่งอาจทำอะไรแบบนี้:

bind R source-file "$HOME/.tmux.conf" && display-message "Configuration reloaded."

อย่างไรก็ตามนั่นไม่ได้ผล หรือทำสิ่งอื่นใดที่ฉันพยายามเป็นวิธีการรวมคำสั่งเข้าด้วยกัน


1
มันใช้งานได้สำหรับฉัน (tmux 1.3 บนเดเบียนบีบ) ด้วย\;เป็นตัวแยก
Gilles 'SO- หยุดความชั่วร้าย'

1
โอเคฉันพบว่า \; ไม่ทำงานและที่เป็นสาระสำคัญของคำตอบที่ฉันเลือกดังต่อไปนี้ ฉันทดสอบ \; เร็วเกินไปและคิดว่ามันไม่ทำงาน แต่ฉันทิ้งคำถามนี้ไว้ที่นี่เพราะมันยังทำหน้าที่ตอบคำถามว่าจะทำอย่างไร
iconoclast

คำตอบ:


12

คุณสามารถใช้run-shellตัวเลือกแต่สิ่งสำคัญคือการแยกคำสั่งด้วย\;

ในกรณีนี้สิ่งที่ชอบ:

bind R source-file ~/.tmux.conf \; run-shell "echo 'Reload'"

run-shell shell-command
(นามแฝง: รัน) เรียกใช้งาน
คำสั่ง shell-command ในพื้นหลังโดยไม่ต้องสร้างหน้าต่าง หลังจากเสร็จสิ้นเอาต์พุตใด ๆ ไปยัง stdout จะแสดงในโหมดการคัดลอก หากคำสั่งไม่ส่งคืนความสำเร็จสถานะการออกจะปรากฏขึ้นเช่นกัน


เฮ้ขอบคุณสำหรับคำตอบ ฉันไม่ได้ทดสอบแบบนั้นโดยเฉพาะ แต่ฉันไม่คิดว่ามันจะใช้ได้เพราะฉันทดสอบโค้ดในคำถามด้วย \; และมันเพิ่งรันคำสั่งที่สอง แต่ไม่ใช่คำสั่งแรก และฉันไม่รู้ว่าทำไม run-shell ถึงใช้งานได้ แต่ display-message จะไม่ทำงาน
iconoclast

1
โอเคฉันได้ลองทดสอบโซลูชันของคุณและ tmux คอยล็อคอย่างชัดเจน (แม้ว่าไม่ใช่ด้วยความมั่นใจแน่นอน) จากคำสั่งนั้น ฉันจะพยายามต่อไป แต่ฉันค่อนข้างแน่ใจว่ามันจะไม่ทำงาน ...
iconoclast

มันทำงานบน tmux 1.4 ไม่ "ล็อคขึ้น" หมายถึงโหมด "คัดลอก" - นั่นคือโดยการออกแบบ ...
jasonwryan

โอเคฉันได้มันไปทำงานโดยไม่ต้องล็อค tmux นั่นทำให้ฉันมีคำถามว่าทำไมความพยายามดั้งเดิมของฉันที่จะใช้ \; ไม่ทำงาน:
iconoclast

1
หัวใจของคำตอบของคุณคือใช้ \; - ส่วนที่เกี่ยวกับ run-shell นั้นไม่สำคัญจริงๆและฉันคิดว่าตัวอย่างที่ฉันให้ไว้กับ display-message นั้นดีกว่ามาก ดังนั้นฉันจะเลือกคำตอบของคุณมากกว่าฉัน แต่คุณต้องการแก้ไขคำตอบหรือไม่เพื่อไม่ให้คนอื่นเข้าใจผิดหรือสับสน ขอบคุณ!
iconoclast

4

หลังจากเขียนคำถามของฉันฉันคิดถึงสิ่งที่อาจใช้ได้ ฉันพยายามแล้วและใช้งานได้คุณต้องทนกับไฟล์หลายไฟล์สำหรับการกำหนดค่า tmux ของคุณ

นี่คือโซลูชันโดยเฉพาะอย่างยิ่งเนื่องจากเกี่ยวข้องกับการโหลดการกำหนดค่าของคุณใหม่ ในไฟล์. tmux.conf ของคุณให้ใส่ดังนี้:

bind R source-file "$HOME/.tmux/reload.tmux"

ในไฟล์ ~ / .tmux / reload.tmux ให้ใส่สิ่งต่อไปนี้:

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

มันทำงานได้อย่างสมบูรณ์


1
นี่เป็นวิธีเดียวที่ใช้ได้จริง ทุกอย่างที่นี่ไม่ทำงาน
lzap

จริงเหรอ? ... ไม่นานมานี้ตั้งแต่ฉันทดสอบวิธีอื่น แต่ฉันก็แปลกใจถ้า tmux ทำแบบนั้น หากคุณแน่ใจว่าใช้ไม่ได้ผลฉันจะทดสอบอีกครั้งและยอมรับคำตอบนี้แทน
iconoclast

ใช่ฉันขอโทษคำตอบข้างต้นจริงๆทำงาน :-)
lzap

1

การใช้เมธอด run-shell ทำให้เอาต์พุตลงในบัฟเฟอร์การคัดลอกซึ่งต้องการการล้างด้วยตนเอง การใช้ไฟล์กำหนดค่าระดับกลางจะช่วยเพิ่มค่าใช้จ่ายในการบำรุงรักษาไฟล์กำหนดค่าที่สอง การรวมคำตอบทั้งสองนี้ทำงานได้ดีขึ้นในกรณีของฉันเนื่องจากฉันต้องการให้ข้อความหายไปหลังจากช่วงเวลาสั้น ๆ คล้ายกับกล่องโต้ตอบป๊อปอัปใน GUI แต่เก็บทุกอย่างไว้ในไฟล์เดียว

bind R source-file ~/.tmux.conf \; display-message "Configuration reloaded"

0

มีแพทช์ช่วยให้การเขียนสคริปต์เต็มเปี่ยมภายใน tmux, การแนบภาษา tcl ไปยังภายในของมัน

http://ershov.github.io/tmux/

นอกจากนี้ยังอนุญาตให้ระบุการกระทำได้มากเท่าที่คุณต้องการสำหรับการกดแป้น 'โหมด'

เมื่อใช้รหัสนี้จะมีลักษณะดังนี้:

bind R tcl { source-file "$HOME/.tmux.conf" ; display-message "Configuration reloaded." }

หรืออ่านได้มากขึ้น:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.