ฉันต้องการคัดลอกและวางจากคลิปบอร์ดของระบบ (X11) เมื่อทำการเลือกใน Tmux และฉันต้องการผูกการกระทำเหล่านี้กับเมาส์ คลิกซ้ายเพื่อคัดลอกและคลิกกลางเพื่อวาง
ฉันต้องการคัดลอกและวางจากคลิปบอร์ดของระบบ (X11) เมื่อทำการเลือกใน Tmux และฉันต้องการผูกการกระทำเหล่านี้กับเมาส์ คลิกซ้ายเพื่อคัดลอกและคลิกกลางเพื่อวาง
คำตอบ:
สำหรับรุ่นเก่าของ Tmux (<1.5) หรือระบบอื่น ๆ tmux-yankลอง สำหรับกรณีเฉพาะนี้ Tmux ทำงานร่วมกับระบบได้เป็นอย่างดี
ในของคุณ~/.tmux.confเพิ่ม:
set -g mouse on
set -g set-clipboard external
bind -T root MouseUp2Pane paste
เพื่อเปิดใช้งานการสนับสนุนเมาส์คัดลอกไปยังคลิปบอร์ดของระบบและผูกกลางคลิกที่บานหน้าต่างเพื่อวาง
และในของคุณ~/.Xresources:
xterm*selectToClipboard: true
xterm*disallowedWindowOps: 20,21,SetXProp
เพื่อให้ Xterm เลือกไปยังคลิปบอร์ดของระบบเช่นกันและอนุญาตให้ Tmux แก้ไขคลิปบอร์ด ("การทำงานของหน้าต่าง")
จากนั้นเมื่อต้องการใช้การเปลี่ยนแปลงของคุณ~/.Xresourcesให้รันxrdb -merge ~/.Xresourcesและรีสตาร์ท Xterm และ Tmux
เพื่อรองรับ macOS และ Windows Subsystem สำหรับ Linux (WSL) เราสามารถเพิ่ม
run-shell $HOME/.tmux.conf.sh
ไปที่~/.tmux.confแล้วสร้าง~/.tmux.conf.shด้วยเนื้อหาต่อไปนี้:
#!/bin/bash
bind_copy=(bind-key -T copy-mode-vi MouseDragEnd1Pane)
# `tmux_bind_copy pbcopy` will make selecting with the mouse (and then
# releasing the selection) in tmux pipe the selection to `pbcopy`
function tmux_bind_copy {
tmux "${bind_copy[@]}" send-keys -X copy-pipe-and-cancel "$@"
}
if [[ "$(uname)" == "Darwin" ]]
then
# Copy with pbcopy on macOS
tmux_bind_copy pbcopy
fi
if [[ ! -z "$WSL_DISTRO_NAME" ]]
then
# copy with Windows' clip.exe on WSL
tmux_bind_copy /mnt/c/Windows/System32/clip.exe
fi
โปรดทราบว่าตัวเลือกการกำหนดค่า“ ขั้นสูง” อื่น ๆ สามารถทำได้.tmux.conf.shเช่นการตั้งค่าการกำหนดค่าตามชื่อโฮสต์ปัจจุบันการแจกจ่ายและอื่น ๆ การใช้if-shellก็เป็นทางเลือกเช่นกัน แต่โดยทั่วไปแล้วค่อนข้างงุ่มง่ามในทางปฏิบัติดังนั้นการใช้เชลล์สคริปจึงเป็นคำตอบที่ยอมรับได้
นอกจากนี้โปรดสังเกตไวยากรณ์ที่แปลก"${bind_copy[@]}"ซึ่งจะแทรก$bind_copy อาร์เรย์โดยไม่ทำการขยายตัวของ glob