ไม่มีข้อผิดพลาดที่นี่ ตั้งแต่ฉันยังรำคาญกับพฤติกรรมนี้ฉันเพิ่งอ่าน Evil code เพื่อค้นหาสาเหตุที่เกิดขึ้น ดังนั้นนี่คือสำเนาตรง / วางของซับความเห็นที่ดีจากการกำหนดค่า Emacs ของฉันที่แก้ไขปัญหานี้:
;; Imagine the following scenario. One wants to paste some previously copied
;; (from application other than Emacs) text to the system's clipboard in place
;; of some contiguous block of text in a buffer. Hence, one switches to
;; `evil-visual-state' and selects the corresponding block of text to be
;; replaced. However, one either pastes some (previously killed) text from
;; `kill-ring' or (if `kill-ring' is empty) receives the error: "Kill ring is
;; empty"; see `evil-visual-paste' and `current-kill' respectively. The
;; reason why `current-kill' does not return the desired text from the
;; system's clipboard is because `evil-visual-update-x-selection' is being run
;; by `evil-visual-pre-command' before `evil-visual-paste'. That is
;; `x-select-text' is being run (by `evil-visual-update-x-selection') before
;; `evil-visual-paste'. As a result, `x-select-text' copies the selected
;; block of text to the system's clipboard as long as
;; `x-select-enable-clipboard' is non-nil (and in this scenario we assume that
;; it is). According to the documentation of `interprogram-paste-function',
;; it should not return the text from the system's clipboard if it was last
;; provided by Emacs (e.g. with `x-select-text'). Thus, one ends up with the
;; problem described above. To solve it, simply make
;; `evil-visual-update-x-selection' do nothing:
;; (fset 'evil-visual-update-x-selection 'ignore)
ประโยคสุดท้ายคือคำตอบสำหรับคำถามของวิธีการ " กำหนดค่าว่าข้อความที่เห็นได้รับการแทนที่ด้วยการกระทำการคัดลอกล่าสุดในกรณีนี้คลิปบอร์ด Windows? "
(fset 'evil-visual-update-x-selection 'ignore)
สนุก.