複数のカーソルで選択されたテキストを新しいバッファにコピーする


9

複数カーソルのすべてのカーソルで選択された領域を強制終了し、すべてを新しい空のバッファにヤンクするとします。複数のカーソルでそれをどのように行いますか?

ここで報告されているように)最初のカーソルから領域をヤンクするだけなので、新しいバッファ上のテキストの単純なコピーと貼り付けは機能しないことに注意してください。

注:この質問は、「カーソルのある行のみを複数のカーソルで保持する」に示されている回答と問題によって動機付けられています。

回答:


9

テキストが削除されたら、マルチカーソル(enter)を終了し、新しいバッファヒット中にC-x r y(通常、削除されたテキストは長方形のkill-ringにあります)


3
何千回もの時間を費やして、殺されたものすべてをヤンクできなかったので、C-x r y作業を行うには複数のカーソルを終了しなければならないことに気づきました。:(
stackunderflow

初めてキルされたテキストがどういうわけか持続しますが、「キャッシュ」のようなものをクリアする必要がありますか?ありがとう!
benjaminz 2016

1
このソリューションは醜いハックだと思います。
dev1223

0

これを試して。複数のカーソルを使用してテキストを選択し、Ccを押すだけです。最近の他の通常のエディターと同じように。

(setq *cutom/bulk-clipboard* nil)

(mc/load-lists)
(push 'custom/copy-across-cursors
      mc/cmds-to-run-once)
(push 'cua-copy-region
      mc/cmds-to-run-once)


(defun custom/copy-across-cursors ()
  (interactive)
  (mc/save-excursion
   (mc/save-window-scroll
    (mc/for-each-fake-cursor
     (save-excursion
       (custom/copy-across-cursor cursor)))))
  (mc--reset-read-prompts)
  (push (buffer-substring
         (caar (region-bounds))
         (cdar (region-bounds)))
        *cutom/bulk-clipboard*)
  (kill-new (s-chomp (loop for x in *cutom/bulk-clipboard*
                           concat (concat x "\n"))))
  (setq *cutom/bulk-clipboard* nil))

(defun custom/copy-across-cursor (cursor)
  (let ((mc--executing-command-for-fake-cursor t)
        (id (overlay-get cursor 'mc-id))
        (annoying-arrows-mode nil)
        (smooth-scroll-margin 0))
    (mc/add-fake-cursor-to-undo-list
     (mc/pop-state-from-overlay cursor)
     (ignore-errors
       (custom/cursor-handle-copy)
       (mc/create-fake-cursor-at-point id)))))

(defun custom/cursor-handle-copy ()
  (when (region-active-p)
    (push (buffer-substring
           (caar (region-bounds))
           (cdar (region-bounds)))
          *cutom/bulk-clipboard*))
  (when deactivate-mark (deactivate-mark)))


(advice-add #'cua-copy-region
            :around (lambda (oldfn &rest args)
                      (if (> (mc/num-cursors) 1)
                          (custom/copy-across-cursors)
                        (apply oldfn args))))

ライブラリへ依存関係が存在することに注意してください。また、このコードはCUAモードの使用を想定しています。そうでない場合は、下部でアドバイス定義をカスタマイズする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.