当我在 Emacs 22.1.1 中剪切(删除)文本(在 X、KDE ​​和 Kubuntu 上其自己的窗口中)时,我无法将其粘贴(猛拉)到任何其他应用程序中。

有帮助吗?

解决方案 2

将以下内容插入到您的 .emacs 文件:

(setq x-select-enable-clipboard t)

其他提示

让我们小心这里的定义

  • 一个 Emacs 副本 是命令 kill-ring-save (通常绑定到 分子量).
  • A 系统副本 是你通常通过按下得到的 C-c (或在应用程序窗口中选择“编辑->复制”)。
  • 一个 X副本 是用鼠标光标“物理”突出显示文本。
  • 一个 Emacs粘贴 是命令 yank (通常绑定到 y).
  • A 系统粘贴 是你通常通过按下得到的 简历 (或在应用程序窗口中选择“编辑-粘贴”)。
  • 一个 X粘贴 按下“鼠标中键”(通过同时按下鼠标左键和右键来模拟)。

就我而言(在 GNOME 上):

  • Emacs 和系统复制通常都可以使用 X 粘贴。
  • X 复制通常与 Emacs 粘贴一起使用。
  • 要使系统复制与 Emacs 粘贴一起使用以及 Emacs 复制与系统粘贴一起使用,您需要添加 (setq x-select-enable-clipboard t) 给你的 .emacs. 。或者尝试

    META-X set-variable RET x-select-enable-clipboard RET t
    

我认为这是相当标准的现代 Unix 行为。

同样重要的是要注意(尽管您说您在单独的窗口中使用 Emacs),当 Emacs 在控制台中运行时,它完全脱离系统和 X 剪贴板:在这种情况下,剪切和粘贴是由终端进行的。例如,终端窗口中的“编辑->粘贴”的作用应该与将剪贴板中的文本输入到 Emacs 缓冲区中完全相同。

在 Emacs 中复制和粘贴的困难在于,您希望它独立于内部 Kill/yank 工作,并且希望它在终端和 GUI 中都工作。现有的针对终端或​​ GUI 的强大解决方案,但不是两者兼而有之。安装 xsel 后(例如 sudo apt-get install xsel),这是我对复制和粘贴以组合它们所做的操作:

(defun copy-to-clipboard ()
  (interactive)
  (if (display-graphic-p)
      (progn
        (message "Yanked region to x-clipboard!")
        (call-interactively 'clipboard-kill-ring-save)
        )
    (if (region-active-p)
        (progn
          (shell-command-on-region (region-beginning) (region-end) "xsel -i -b")
          (message "Yanked region to clipboard!")
          (deactivate-mark))
      (message "No region active; can't yank to clipboard!")))
  )

(defun paste-from-clipboard ()
  (interactive)
  (if (display-graphic-p)
      (progn
        (clipboard-yank)
        (message "graphics active")
        )
    (insert (shell-command-to-string "xsel -o -b"))
    )
  )

(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)

我将其粘贴在我的 .emacs 中:

(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)

随后,我在 Emacs 中的任何内容和任何其他 X11 或 Gnome 应用程序之间来回剪切和粘贴时基本上没有任何问题。

奖金:要让这些事情在 Emacs 中发生,而不必重新加载整个 .emacs,请在 .emacs 缓冲区中每个表达式的右括号后面使用光标执行 C-x C-e。

祝你好运!

我假设 emacs 指的是 X 下的 Emacs(即不在终端窗口内)。

有两种方法:

  1. (仅适用于Unix OS),用鼠标(将其复制到X剪贴板)突出显示所需的文本,然后单击以粘贴。
  2. 突出显示所需的文本,然后突出显示“ MX剪贴板 - 杀手 - 单元”(请注意,您可以将其绑定到更简单的键)。然后只需在您喜欢的应用中“编辑 - >粘贴”即可。

可用的剪贴板操作:

  • 剪贴板 - 杀伤环 - 副本 - 从emacs到剪贴板的复制选择
  • 剪贴板 - 杀伤区 - 从emacs到剪贴板切割选择
  • 剪贴板 - 粘贴 - 从剪贴板到emacs

EmacsWiki 文章 这解释了 X 下复制和粘贴的一些问题以及如何配置它来工作。

这适用于 M-w 在 Mac OSX 上。只需添加到您的 .emacs 文件。

(defun copy-from-osx ()
   (shell-command-to-string "pbpaste"))
(defun paste-to-osx (text &optional push)
   (let ((process-connection-type nil))
      (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
         (process-send-string proc text)
         (process-send-eof proc))))

(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)

来源 https://gist.github.com/the-kenny/267162

下面的代码受到 @RussellStewart 上面答案的启发,添加了对 x-PRIMARY 和 x-SECONDARY 的支持,替换 region-active-puse-region-p 覆盖空区域的情况,如果尚未安装 xsel,则不会静默返回(返回错误消息),并且包含“剪切”功能(emacs C-y、windows C-x)。

(defun my-copy-to-xclipboard(arg)
  (interactive "P")
  (cond
    ((not (use-region-p))
      (message "Nothing to yank to X-clipboard"))
    ((and (not (display-graphic-p))
         (/= 0 (shell-command-on-region
                 (region-beginning) (region-end) "xsel -i -b")))
      (error "Is program `xsel' installed?"))
    (t
      (when (display-graphic-p)
        (call-interactively 'clipboard-kill-ring-save))
      (message "Yanked region to X-clipboard")
      (when arg
        (kill-region  (region-beginning) (region-end)))
      (deactivate-mark))))

(defun my-cut-to-xclipboard()
  (interactive)
  (my-copy-to-xclipboard t))

(defun my-paste-from-xclipboard()
  "Uses shell command `xsel -o' to paste from x-clipboard. With
one prefix arg, pastes from X-PRIMARY, and with two prefix args,
pastes from X-SECONDARY."
  (interactive)
  (if (display-graphic-p)
    (clipboard-yank)
   (let*
     ((opt (prefix-numeric-value current-prefix-arg))
      (opt (cond
       ((=  1 opt) "b")
       ((=  4 opt) "p")
       ((= 16 opt) "s"))))
    (insert (shell-command-to-string (concat "xsel -o -" opt))))))

(global-set-key (kbd "C-c C-w") 'my-cut-to-xclipboard)
(global-set-key (kbd "C-c M-w") 'my-copy-to-xclipboard)
(global-set-key (kbd "C-c C-y") 'my-paste-from-xclipboard)

嗯,您使用的 emacs 是什么平台和版本?对于 Windows Vista 上的 GNU Emacs 22.1.1,它对我来说工作得很好。

如果万一您通过 RealVNC 查看器从 Windows 到 Linux 执行此操作,请确保您首先在 Linux 机器上运行“vncconfig -iconic”......

我总是使用快速粘贴——在 emacs 中拖动选择,在目标窗口中点击鼠标中键。

(根据 kate 的参考,我认为您使用的是 linux 或类似系统,并且可能以某种方式在 X 中使用 emacs。)

您可能想要指定您正在使用的平台。是在 linux、unix、macosx、windows、ms-dos 上吗?

我相信对于 Windows 来说它应该有效。对于 MacOSX,它将被添加到 x-windows 剪贴板,这与 macosx 剪贴板不同。对于 Linux,这取决于您的窗口管理器风格,但我相信 x-windows 在大多数窗口管理器上都可以很好地处理它。

所以,请具体说明。

我所做的是使用一个好的终端工具(Windows 上的 PuTTY,Linux 上的 Konsole 或 Terminal),它内置了复制功能。

在 PuTTY 中,您可以使用鼠标突出显示所需的文本,然后将其粘贴到其他位置。在 PuTTY 窗口中右键单击可粘贴 Windows 复制/粘贴缓冲区的内容。

在 Linux 上的 Konsole 或终端中,突出显示所需内容,然后按 Shift+Ctrl+C 进行复制,按 Shift+Ctrl+V 进行粘贴。

在 emacs 的 win32 编译中,拉出文本确实会将其放在复制/粘贴缓冲区中..大多数时候。

在 Mac OS X 上,Apple 键快捷键可以正常工作,因为终端会捕获它们。

没有直接的方法在命令行上执行此操作,因为 shell 不为每个应用程序维护复制/粘贴缓冲区。巴什 为自己维护一个复制/粘贴缓冲区,并且默认情况下,emacs ^k/^y 快捷键可以工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top