Emacs не вставляє у візуальному режимі Evil у будь-який буфер обміну ОС


19

Налаштування:

Версія GUI GNU Emacs 25.0.50.1 (x86_64-w64-mingw32) 2015-07-25 на KAEL Складено з EmacsW64.

Пакет Evil, використовуючи останню версію Evil від MELPA

Біт Windows 7 x64.

Ситуація:

Тестовано з порожньою конфігурацією Emacs з увімкненим лише Evil. Я копіюю текст із програми Windows. Потім вставити його в Emacs всередині normal modeз p. Я бачу текст.

Потім переходжу на додаток Windows, вибираю інший текст, копіюю його. Поверніться назад до Emacs, візуально виберіть текст і вставте всередину visual mode. Але текст у регіоні не буде замінений текстом із буфера обміну Windows.

Це не з Vim за замовчуванням. Як я можу налаштувати, щоб візуально текст замінювався останньою дією копіювання, в цьому випадку буфер обміну Windows?



1
Я знаю обидві теми, але думаю, що це більше пов'язане зі злом, ніж буфер обміну. Функція буфера обміну працює нормально у звичайному режимі. І не для візуального режиму.
ReneFroger

Ах, я бачу, що ти кажеш. Для чого це не важливо для Windows: він також не витягує з буфера обміну ОС у візуальному стані на Linux (Fedora, якщо це має значення).
Дан

Дякую за оновлення, я змінив назву, щоб вона не була специфічною для ОС.
ReneFroger

Це просто звичайний злий клоп? Ви можете повідомити про це?
PythonNut

Відповіді:


28

Тут немає помилок . Оскільки я також був роздратований такою поведінкою, я просто читав Злий код, щоб дізнатися, чому це відбувається. Отже, ось пряма копія / вставка добре коментованого однокласника з моєї конфігурації 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)

Насолоджуйтесь.


Дякую Олександре, мені також сподобався твій складений Emacs від Harroogan. Приємна знахідка, я позначив вашу відповідь правильною. Як здається, я можу лише підкреслити та відзначити це як правильне без будь-якої нагороди. Що сумно, ти справді це заслужив. :-)
ReneFroger

1
Людина цей клоп! Мене це дратувало, що я повернувся до vim, щоб просто позбутися такої поведінки. Я шукав всюди, а також доповідав злому трекеру, але, на жаль, ніхто не відповів на моє питання. Олександре, ти мій герой!
dvcrn

1
НІШЕ! Це повинно бути за замовчуванням у spacemacs.
justingordon

Схоже, підступно, як ця поведінка увімкнена за замовчуванням. Мені потрібно було деякий час зрозуміти, що відбувається, і те, що немає можливості відключити це за допомогою встановлення змінної. Цей спосіб працює добре :)
Хорхе Ізраїль Пенья
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.