EmacsはすべてのOSクリップボードでEvils Visualモードに貼り付けられません


19

セットアップ:

GUIバージョンGNU Emacs 25.0.50.1(x86_64-w64-mingw32)on 2015-07-25 on KAEL EmacsW64 からコンパイル。

MELPAの最新バージョンのEvilを使用したパッケージEvil

Windows 7 x64ビット。

状況:

Evilのみを有効にして空のEmacs設定でテストしました。Windowsアプリケーションからテキストをコピーします。それから私は、Emacsの内部に貼り付けnormal modep。テキストが表示されます。

次に、Windowsアプリケーションに切り替え、別のテキストを選択してコピーします。Emacsに戻り、テキストを視覚的に選択して、内部に貼り付けますvisual mode。ただし、領域内のテキストは、Windowsクリップボードのテキストに置き換えられません。

これはデフォルトのVimではありません。視覚的なテキストが最新のコピーアクション(この場合はWindowsクリップボード)に置き換えられるように構成するにはどうすればよいですか?



1
私は両方のトピックを知っていますが、クリップボードよりも悪に関連していると思います。クリップボード機能は、通常モード内で正常に機能します。視覚モードではありません。
-ReneFroger

ああ、私はあなたが言っていることを見る。価値があるのは、Windows固有ではありません。Linux(Fedora、重要な場合)の視覚状態でOSクリップボードからヤンクすることもありません。
ダン

更新のおかげで、タイトルをOS固有ではないように変更しました。
-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も楽しみました。良い発見、私はあなたの答えを正しいものとしてマークしました。どうやら、私は投票して賞金なしで正しいとマークすることしかできません。悲しいことです、あなたは本当にそれに値します。:
ReneFroger

1
このバグの男!この動作を取り除くためだけにvimに切り替えたのは、その程度に私を悩ませました。私はどこでも検索し、邪悪な追跡者に報告しましたが、残念ながら誰も私の問題に応答しませんでした。アレクサンダー、あなたは私のヒーローです!
dvcrn

1
いいね!これはspacemacsのデフォルトです。
Justingordon

この動作がデフォルトでどのようにオンになっているかは卑劣に思えます。何が起こっているのか、変数を設定して無効にする方法がないことを理解するためにしばらく時間がかかりました。この回避策はうまくいきます:)
ホルヘイスラエルペーニャ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.