Không có lỗi ở đây. Vì tôi cũng khó chịu với hành vi này, tôi chỉ đọc mã Evil để tìm hiểu lý do tại sao điều này xảy ra. Vì vậy, đây là một bản sao / dán thẳng của một lớp lót được nhận xét tốt từ cấu hình Emacs của tôi để khắc phục vấn đề này:
;; 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)
Câu cuối cùng là câu trả lời cho câu hỏi làm thế nào để " cấu hình nó, rằng văn bản trực quan được thay thế bằng hành động sao chép mới nhất, trong trường hợp này là bảng tạm Windows? "
(fset 'evil-visual-update-x-selection 'ignore)
Thưởng thức.