Emacs는 모든 OS 클립 보드와 함께 Evil 's Visual 모드에 붙여 넣지 않습니다


19

설정:

EmacsW64에서 컴파일 된 KAEL의 2015-07-25의 GUI 버전 GNU Emacs 25.0.50.1 (x86_64-w64-mingw32)

MELPA의 최신 Evil 버전을 사용하는 Package Evil

Windows 7 x64 비트

상태:

Evil 만 활성화 한 빈 Emacs 구성으로 테스트했습니다. Windows 응용 프로그램에서 일부 텍스트를 복사합니다. 그럼 내부 이맥스에 붙여 넣습니다 normal modep. 나는 텍스트를 본다.

그런 다음 Windows 응용 프로그램으로 전환하고 다른 텍스트를 선택하여 복사하십시오. Emacs로 다시 전환하여 텍스트를 시각적으로 선택하고 안에 붙여 넣습니다 visual mode. 그러나 해당 영역 내의 텍스트는 Windows 클립 보드의 텍스트로 대체되지 않습니다.

이것은 기본 Vim이 아닙니다. 시각적 텍스트가 최신 복사 작업 (이 경우 Windows 클립 보드)으로 대체되도록 구성하려면 어떻게해야합니까?



1
두 가지 주제를 모두 알고 있지만 클립 보드보다 더 악하다고 생각합니다. 클립 보드 기능은 일반 모드에서 제대로 작동합니다. 그리고 비주얼 모드가 아닙니다.
ReneFroger

아, 무슨 말인지 알 겠어 가치가있는 것은 Windows 전용이 아닙니다 .Linux의 시각적 상태에서 OS 클립 보드에서 손상되지 않습니다 (중요한 경우 Fedora).
Dan

업데이트 해 주셔서 감사합니다. 제목을 OS별로 변경하지 않았습니다.
ReneFroger

이것은 단순한 사악한 버그입니까? 당신이 그것을보고 할 수있는 기회?
PythonNut

답변:


28

여기에는 버그 가 없습니다 . 또한이 동작에 짜증이 났기 때문에 이블이 발생하는 이유를 찾기 위해 Evil 코드를 읽었습니다. 따라서 다음은이 문제를 해결하는 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)

즐겨.


알렉산더에게 감사드립니다. 또한 당신의 편집 된 Harroogan 's Emacs도 즐겼습니다. 좋은 발견, 나는 당신의 대답을 올바른 것으로 표시했습니다. 보이는 것처럼, 나는 현상금없이 정당한 것으로 표명하고 올바로 표시 할 수 있습니다. 슬프다, 당신은 정말로 가치가있다. :-)
ReneFroger

1
이 버그를 사람! 이 행동을 없애기 위해 vim으로 다시 전환 한 것은 저를 화나게했습니다. 나는 사방을 수색하고 사악한 추적자에게보고했지만 슬프게도 아무도 내 문제에 응답하지 않았습니다. 알렉산더, 당신은 나의 영웅입니다!
dvcrn

1
좋은! spacemacs의 기본값이어야합니다.
justingordon

이 동작이 기본적으로 어떻게 작동하는지 몰래 보인다. 무슨 일이 일어나고 있는지, 변수 설정을 통해 그것을 비활성화 할 수있는 방법이 없다는 사실을 깨달았습니다. 이 해결 방법은 다음과 같이 잘 작동합니다. :
Jorge Israel Peña
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.