ใช้คลิปบอร์ดของระบบในโหมด vi-copy ใน tmux


50

ฉันกำลังเรียกใช้ tmux 1.6 และฉันพยายามกำหนดค่าให้ใช้ปุ่มลัดแบบ vi และใช้คลิปบอร์ดของระบบเมื่อคัดลอกในโหมดโต้ตอบ:

set-window-option -g mode-keys vi

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' "copy-selection && run \"tmux save-buffer | xclip -selection clipboard\""

ใส่เพียงแค่ฉันต้องการที่จะสามารถที่จะทำC+ [และจากนั้นใช้vเพื่อเริ่มต้นการเลือกข้อความสำหรับการคัดลอกแล้วเมื่อyถูกผลักให้คัดลอกเลือกในการเลือก tmux xclipแล้วส่งออกไปยังคลิปบอร์ดระบบโดยใช้

น่าเสียดายที่เมื่อฉันพยายามทำสิ่งนี้ฉันเห็นสิ่งต่อไปนี้:

.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"

มีวิธีการทำเช่นนี้ในการกำหนดค่า tmux หรือไม่?

คำตอบ:


86

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

นี่คือการตั้งค่าที่คุณจะทำ:

(สำหรับ tmux เวอร์ชั่น <2.5 )

bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

(สำหรับรุ่น tmux > = 2.5 )

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

จากนั้นกดปุ่มCtrl+b [เพื่อเข้าสู่โหมดคัดลอก จากนั้นกดปุ่มSpaceตามด้วยปุ่มเคลื่อนไหวใด ๆ ก็ตามของ vi เพื่อทำการเลือก จากนั้นแทนที่จะกดปุ่มEnterHit yและการเลือกจะถูกคัดลอกไปยังคลิปบอร์ด

หมายเหตุ: สิ่งนี้ถือว่าคุณกำลังใช้การเชื่อมโยงดีฟอลต์ของ tmux ด้วยปุ่ม vi

Tmux มีตารางผูกกุญแจที่แตกต่างกันสำหรับโหมดที่แตกต่างกัน ดังนั้นbind-key -t vi-copy yตั้งค่าการดำเนินการสำหรับyคีย์ในโหมดคัดลอก ตอนแรกฉันสับสนเพราะฉันคุ้นเคยกับการกดปุ่มEnterหลังจากทำการเลือก Enterจริงๆแล้วเป็นเพียงการเชื่อมโยงคีย์เริ่มต้นสำหรับcopy-selectionคำสั่ง (เมื่ออยู่ในโหมดคัดลอก) คำสั่งช่วยให้เราสามารถผูกคีย์ใหม่กับท่อที่เลือกไปยังคำสั่งซึ่งในกรณีนี้คือcopy-pipexclip

list-keys -t vi-copyท่านสามารถเข้าดูผูกที่สำคัญทั้งหมดของโหมดถ่ายสำเนาโดยการเรียกใช้


ขอบคุณมากฉันต้องดาวน์โหลดและรวบรวม tmux 1.9a แต่มันก็ไม่ยากและตอนนี้มันก็ใช้งานได้!
Naftuli Kay

3
ถ้ามันไม่ได้ทำงานเพียงแค่ตรวจสอบว่าxclipมีการติดตั้งจริงในระบบของคุณ (มันไม่ได้ติดตั้งโดยค่าเริ่มต้นบน Ubuntu คุณจะต้องsudo apt-get install xclipได้รับมัน)
ecerulm

3
สำหรับ OSX แทนที่ด้วยxclip pbcopyสำหรับ Cygwin บน Windows ให้แทนที่ด้วยputclip(จากcygutils-extraแพ็คเกจ)
SnoringFrog

5
การเชื่อมโยงต่อไปนี้จากรายการบล็อกนี้ใช้งานได้ดีบน Tmux 2.6 และไม่มีข้อเสียของการวางตัวอักษรแบบสุ่มบนหน้าจอเมื่อคัดลอก:bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
Matthias Braun

1
นี้ไม่ได้ทำงานให้ฉันจนกว่าฉันจะลบออกจากบรรทัดนี้ set -g mouse on.tmux.conf: นี่ควรจะเปิดใช้งาน"โหมดเมาส์"แต่แม้หลังจากลบมันทุกอย่างที่เกี่ยวกับเมาส์ของฉันทำงานได้ดี (ทำงานล้อเลื่อนการเลือกเมาส์ทำงานได้) ...
ndemou

11

รุ่นที่ปรับปรุงเพื่อตอบ Ben Davis

เข้ากันได้กับ tmux 2.4

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"

4
ฉันคิดว่ามันทำงานได้ดีขึ้นเล็กน้อยที่มีมากกว่าcopy-pipe-and-cancel copy-pipeนี่คือ tmux 2.5
wreckgar23

6

คุณกำลังประสบปัญหาทางเทคนิคสองสามอย่าง:
การผูก "โหมดพิเศษ" (เช่นvi-copy) ...

  1. ใช้ชุดคำสั่งอื่น (เช่นrun-shellaka runไม่พร้อมใช้งาน) และ
  2. ไม่มีความสามารถในการผูกหลายคำสั่ง (ซึ่งโดยปกติสามารถแยกได้โดย;- &&ตัวคั่นคำสั่งของเชลล์ไม่พร้อมใช้งาน)

tmux 1.8 มีcopy-pipeซึ่งสามารถช่วยแม้ว่า:

bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'

(มีข้อผูกพันเช่นนี้แสดงไว้ในคำถามที่พบบ่อย )


1
ฉันมี tmux 1.8 และดูเหมือนจะใช้งานไม่ได้ (แก้ไข) ฮึฉันเกลียดข้อความอินพุตที่ส่งใน Enter อย่างไรก็ตามฉันได้เพิ่มการเชื่อมโยงคีย์นี้ แต่เมื่อฉันทำ <prefix> -y และกดปุ่ม [space] เนื้อหาจะไม่ถูกคัดลอกไปยังคลิปบอร์ด
Ben Davis

แค่คิดออก ฉันไม่เข้าใจวิธีการทำงานของปุ่มลัด "vi-copy"
Ben Davis

5

ลองดูที่ปลั๊กอิน tmux-yank สำหรับ tmux https://github.com/tmux-plugins/tmux-yank

มันมีวิธีอัตโนมัติในการคัดลอก / วางจาก tmux ไปยังคลิปบอร์ดของระบบ มันทำงานบนระบบ OSX / Linux / Cygwin


มันใช้งานได้ดีสำหรับฉันขอบคุณสำหรับลิงค์!
ไบรอันเฮนรี่

2

สำหรับ macOS คุณสามารถเพิ่มบรรทัดนี้ได้ .tmux.conf

bind -t vi-copy y copy-pipe 'pbcopy'


ผู้ใช้ macOS สำหรับ tmux> = 2.5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
ได

1

นี่คือสิ่งที่ฉันทำงานด้วย tmux 2.2 และติดตั้ง xclip แล้ว สำหรับการคัดลอกลักษณะเป็นกลุ่มเพิ่มต่อไปนี้ใน. tmux.conf

bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

ที่นี่เมื่ออยู่ในโหมดคัดลอก PREFIX v จะเริ่มการเลือกและ PREFIX y จะคัดลอกไปยังคลิปบอร์ด คำนำหน้า p สามารถใช้เพื่อวางใน terminal

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