Tôi đã muốn tích hợp bộ đệm cắt của Zsh với bảng tạm X. Tôi đã thử http://stchaz.free.fr/mouse.zsh đã nói ở trên nhưng tôi thấy tôi không thích tất cả các hoạt động Zsh của mình điền vào bảng tạm. Chẳng hạn, đôi khi tôi sẽ sao chép một cái gì đó trong trình duyệt, sau đó vào shell và chỉnh sửa dòng lệnh và sau đó dán. Nhưng thường chỉnh sửa dòng lệnh - ví dụ như xóa một từ - sửa đổi bộ đệm cắt Zsh. Dù tốt hay xấu, X chỉ có một bảng tạm, không phải vòng diệt, vì vậy khi thao tác chỉnh sửa Zsh ghi đè lên bảng tạm, điều tôi muốn dán bị mất - Tôi không thể bật nó (Cy My) như tôi có thể làm trong Zsh hoặc Emacs.
Vì vậy, những gì tôi đã làm thay vào đó là tạo ra các tổ hợp phím đặc biệt mới để tương tác với bảng tạm X qua zsh. Hóa ra "^ Xw" và "^ Xy" không được sử dụng trong cả Emacs và Zsh, vì vậy tôi có thể có được giao diện nhất quán bằng cách ràng buộc chúng trong cả hai ứng dụng. Bằng cách này, các hoạt động chỉnh sửa thông thường, cutbuffer và kill ring được để lại một mình. Nếu tôi muốn sao chép một cái gì đó vào bảng tạm, tôi đặt vùng và thực hiện "^ Xw" (hoặc nếu tôi đã giết nó và vùng đó không hoạt động, tôi chỉ có thể thực hiện "^ Xw" để sao chép bộ đệm đã cắt). Việc dán từ bảng tạm được thực hiện với "^ Xy".
# define commands to copy and paste x clipboard
# ^Xw - copy region, or cut buffer
# ^Xy - paste x clipboard
# in both cases, modifies CUTBUFFER
copy-to-xclip() {
[[ "$REGION_ACTIVE" -ne 0 ]] && zle copy-region-as-kill
print -rn -- $CUTBUFFER | xclip -selection clipboard -i
}
zle -N copy-to-xclip
bindkey "^Xw" copy-to-xclip
paste-xclip() {
killring=("$CUTBUFFER" "${(@)killring[1,-2]}")
CUTBUFFER=$(xclip -selection clipboard -o)
zle yank
}
zle -N paste-xclip
bindkey "^Xy" paste-xclip
kill-region
vớivi-delete
vàyank
vớivi-put-after
, vv Tương tự quấnvi-yank
, và những người khác. (Tôi chưa tìm được cách nào để tập trung hơn)