Emacs不会在每个OS剪贴板上以Evil的Visual模式粘贴


19

设定:

KAEL的GUI版本GNU Emacs 25.0.50.1(x86_64-w64-mingw32)/ 2015-07-25从EmacsW64 编译。

使用MELPA的最新版本的Evil打包Evil

Windows 7 x64位。

情况:

使用仅启用了Evil的空Emacs配置进行了测试。我从Windows应用程序复制一些文本。然后,我将其粘贴到Emacs里面normal modep。我看到了文字。

然后我切换到Windows应用程序,选择另一个文本,将其复制。切换回Emacs,直观地选择文本,然后粘贴到visual mode。但是区域内的文本不会被Windows剪贴板中的文本替换。

这不是默认的Vim。我如何配置它,以使视觉文本被最新的复制操作(在本例中为Windows剪贴板)替换?



1
我知道这两个主题,但我认为与剪贴板相关的更多与邪恶相关。剪贴板功能在正常模式下可以正常工作。而不是视觉模式。
ReneFroger

啊,我明白你在说什么。就其价值而言,它不是特定于Windows的:它也不会从Linux上处于可视状态的OS剪贴板中抽出(如果需要的话,是Fedora)。

感谢更新,我将标题更改为不特定于操作系统。
ReneFroger

这只是一个普通的邪恶漏洞吗?您有机会举报吗?
PythonNut

Answers:


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的Emacs。很好的发现,我将您的答案标记为正确的答案。看来,我只能在没有任何悬赏的情况下投票并标记为正确。真可惜,你真的应该得到它。:-)
ReneFroger 2015年

1
伙计这个错误!我很生气,以至于为了摆脱这种行为我又回到了vim。我到处搜索,还向邪恶追踪者报告,但可惜没有人回答我的问题。亚历山大,你是我的英雄!
dvcrn

1
不错!这应该是spacemacs中的默认设置。
justingordon

默认情况下,如何进行此行为似乎很隐秘。花了我一段时间来了解正在发生的事情,以及无法通过设置变量来禁用它的事实。此解决方法效果很好:)
Jorge IsraelPeña16年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.