วิธีการคัดลอกจาก / ไปยัง 'คลิปบอร์ด' ของ tmux ด้วย shell shell?


17

เมื่อทำงานในสภาพแวดล้อมของเชลล์ฉันใช้งานบ่อยครั้งในการคัดลอก 'การส่งออกไพพ์กลาง' รอบ ๆ (เช่นจาก / ไปยังบรรณาธิการที่ใช้งานแล้วไปยังเชลล์อื่น ๆ เครื่องอื่น ๆ ฯลฯ )

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

  • X11: ... | xsel -i/xsel -o | ...
  • OS X: ... | pbcopy/pbpaste | ...

ฉันจะได้รับพฤติกรรมที่สะดวกในทำนองเดียวกันโดยใช้ตัวช่วยการคัดลอก / วาง tmux ได้อย่างไร?

คำตอบ:


20

TL; DR

  • ... | tmux loadb -
  • tmux saveb - | ...

คำอธิบายและความเป็นมา

ใน tmux สำเนาทั้งหมด / วางกิจกรรมไปผ่านสแต็คบัฟเฟอร์ที่ด้านบน (ดัชนี 0) เป็นข้อความที่คัดลอกส่วนใหญ่เมื่อเร็ว ๆ -bนี้และจะนำมาใช้สำหรับการวางเมื่อไม่มีดัชนีบัฟเฟอร์ที่มีให้อย่างชัดเจนด้วย คุณสามารถตรวจสอบบัฟเฟอร์ปัจจุบันด้วยtmux list-buffersหรือทางลัดเริ่มต้น+tmux-prefix#

มีสองวิธีในการไพพ์เข้าสู่บัฟเฟอร์ tmux ใหม่ที่ด้านบนของสแต็กset-bufferการรับอาร์กิวเมนต์สตริงและload-bufferการโต้แย้งไฟล์ ในการไพพ์ลงในบัฟเฟอร์คุณมักต้องการใช้load-bufferกับ stdin เช่น:

print -l **/* | tmux loadb -

การวางกลับเข้าไปในตัวแก้ไขและสิ่งนี้ค่อนข้างชัดเจน ( tmux-prefix+ ]หรืออะไรก็ตามที่คุณผูกพันpaste-buffer) อย่างไรก็ตามการเข้าถึงการวางจากด้านในของเปลือกไม่ใช่เพราะการเรียกpaste-bufferจะเขียนการวางลงใน stdin ซึ่งสิ้นสุดลงในการแก้ไขเทอร์มินัลของคุณ บัฟเฟอร์และการขึ้นบรรทัดใหม่ใด ๆ ในการวางจะทำให้เชลล์ดำเนินการตามที่วางไว้ (อาจเป็นวิธีที่ดีในการทำลายวันของคุณ)

มีสองวิธีในการเข้าถึงสิ่งนี้:

  1. tmux pasteb -s ' ': -sแทนที่ส่วนท้ายบรรทัดทั้งหมด (ตัวคั่น) ด้วยตัวคั่นที่คุณระบุ อย่างไรก็ตามคุณยังคงได้รับพฤติกรรมpaste-bufferซึ่งหมายความว่าการวางลงในบัฟเฟอร์แก้ไขเทอร์มินัลซึ่งอาจเป็นสิ่งที่คุณต้องการ แต่มักจะไม่
  2. tmux showb | ...: show-bufferพิมพ์บัฟเฟอร์ที่ stdout และเกือบจะเป็นสิ่งที่จำเป็น แต่เป็นคริสจอห์นสันกล่าวถึงในการแสดงความคิดเห็น , show-bufferการดำเนินการเข้ารหัสฐานแปดของที่ไม่สามารถพิมพ์อักขระ ASCII และอักขระที่ไม่ใช่ ASCII นี้โชคไม่ดีที่มักจะแบ่งพอที่จะเป็นที่น่ารำคาญกับสิ่งที่ง่ายชอบ null สิ้นสุดสตริงหรือสำเนียงอักขระภาษาละติน (เช่น. (ใน zsh) print -N á | tmux loadb - ; tmux showbพิมพ์\303\241\000)
  3. tmux saveb - | ...: save-bufferทำเพียงย้อนกลับload-bufferและเขียนไบต์ดิบที่ไม่ได้แก้ไขใน stdin ซึ่งเป็นสิ่งที่ต้องการในกรณีส่วนใหญ่ จากนั้นคุณสามารถประกอบท่ออื่นต่อไปได้และเช่น ผ่าน| xargs -n1 -I{} ...ไปยังสายการผลิตที่ชาญฉลาด ฯลฯ

1
tmux show-bufferจะทำการเข้ารหัสแบบฐานแปดของอักขระควบคุม C0 และไบต์ที่ไม่ใช่ ASCII (เช่นอักขระละตินที่เน้นเสียง ฯลฯ ) คุณสามารถใช้tmux save-buffer -ถ้าคุณต้องการไบต์ดิบ (นี่คือสิ่งที่คุณต้องการ)
Chris Johnsen

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