当我在Emacs 22.1.1中剪切(杀死)文本时(在X上自己的窗口中,在KDE中,在Kubuntu上),我无法将其粘贴(猛拉)到任何其他应用程序中。
让我们小心这里的定义
-
Emacs副本是命令kill-ring-save(通常绑定到M-w)。
-
通常通过按C-c(或在应用程序窗口中选择"编辑"->"复制")获得系统副本。
-
X副本是用鼠标光标"物理地"突出显示文本。
-
Emacs粘贴是命令yank(通常绑定到C-y)。
-
通常,通过按C-v(或在应用程序窗口中选择"编辑-粘贴")可以得到系统粘贴。
-
X粘贴是按下"鼠标中键"(通过同时按下左右鼠标键来模拟)。
就我而言(在GNOME上):
我认为这是相当标准的现代Unix行为。
同样重要的是要注意(尽管您说您在单独的窗口中使用Emacs),当Emacs在控制台中运行时,它与系统和X剪贴板完全分离:在这种情况下,剪切和粘贴是由终端介导的。例如,终端窗口中的"编辑->粘贴"应该完全像将剪贴板中的文本输入到Emacs缓冲区中一样。
将以下内容插入您的.emacs文件:
1
| (setq x-select-enable-clipboard t) |
我把这个贴在我的.emacs中:
1 2
| (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中复制和粘贴的困难在于,您希望它独立于内部kill / yank运行,并且希望它同时在终端和gui中运行。现有针对终端或??GUI的强大解决方案,但不能同时针对两者。安装xsel(例如sudo apt-get install xsel)之后,我将复制并粘贴以合并它们:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| (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是指X下的Emacs(即不在终端窗口内)。
有两种方法:
(仅适用于Unix OS)
用您的文字突出显示所需文本
鼠标(将其复制到X
剪贴板),然后单击鼠标中键
糊。
突出显示所需文本,然后突出显示" M-x剪贴板-kill-ring-保存"
(请注意,您可以将此绑定到一个更简单的
键)。然后只需在"编辑->粘贴"中
您最喜欢的应用。
剪贴板操作可用:
-
剪贴板-杀死环-保存-复制
从Emacs到剪贴板的选择
-
剪贴板杀人区域-切
从Emacs到剪贴板的选择
-
剪贴板粘贴-从粘贴
Emacs的剪贴板
EmacsWiki上有一篇文章,解释了在X下复制和粘贴的一些问题以及如何配置它以使其工作。
在Mac OSX上与M-w一起使用。只需添加到您的.emacs文件。
1 2 3 4 5 6 7 8 9 10
| (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
根据其他答案,我使用以下内容使C-x C-w和C-x C-y在Mac和Linux上都可以复制并粘贴(如果有人知道Windows的版本可以随意添加)。请注意,在Linux上,您将必须使用软件包管理器安装xsel和xclip。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| ;; Commands to interact with the clipboard
(defun osx-copy (beg end)
(interactive"r")
(call-process-region beg end "pbcopy"))
(defun osx-paste ()
(interactive)
(if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
(call-process"pbpaste" nil t nil))
(defun linux-copy (beg end)
(interactive"r")
(call-process-region beg end "xclip" nil nil nil"-selection""c"))
(defun linux-paste ()
(interactive)
(if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
(call-process"xsel" nil t nil"-b"))
(cond
((string-equal system-type"darwin") ; Mac OS X
(define-key global-map (kbd"C-x C-w") 'osx-copy)
(define-key global-map (kbd"C-x C-y") 'osx-paste))
((string-equal system-type"gnu/linux") ; linux
(define-key global-map (kbd"C-x C-w") 'linux-copy)
(define-key global-map (kbd"C-x C-y") 'linux-paste))) |
下面的代码受@RussellStewart上面答案的启发,增加了对x-PRIMARY和x-SECONDARY的支持,用use-region-p替换了region-active-p以覆盖空白区域,如果未安装xsel,它不会默默返回(返回错误消息),并包括"剪切"功能(emacs Cy,Windows Cx)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| (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) |
您可能要指定使用的平台。它在Linux,Unix,MacOSX,Windows,MS-DOS上吗?
我相信对于Windows,它应该可以工作。对于MacOSX,它将添加到x-windows剪贴板中,与macosx剪贴板不同。对于Linux,这取决于您的窗口管理器风格,但是我相信x-windows在大多数窗口中都可以很好地处理它。
因此,请指定。
我一直使用快速粘贴-在emacs中拖动选择,在目标窗口中单击鼠标中键。
(从参考资料到kate,我认为您使用的是Linux或类似操作系统,并且可能以一种或另一种方式在X中使用emacs。)
嗯,您使用的是什么平台和哪个版本的emacs?使用Windows Vista上的GNU Emacs 22.1.1,对我来说很好用。
如果您有机会通过RealVNC查看器从Windows到Linux进行此操作,请确保首先在Linux机器上运行" vncconfig -iconic"。
我要做的是使用内置复制功能的优质终端工具(Windows上为PuTTY,Linux上为Konsole或Terminal)。
在PuTTY中,用鼠标突出显示所需的文本,然后将其粘贴到其他位置。在PuTTY窗口中单击鼠标右键将粘贴Windows复制/粘贴缓冲区的内容。
在Linux上的Konsole或Terminal中,突出显示所需内容,然后按Shift + Ctrl + C进行复制,并按Shift + Ctrl + V进行粘贴。
在emacs的win32编译中,大多数情况下,拖拽文本会将其放置在复制/粘贴缓冲区中。
在Mac OS X上,Apple键快捷键可以正常工作,因为Terminal会捕获它们。
在命令行上没有直接的方法,因为shell不会为每个应用程序维护一个复制/粘贴缓冲区。 bash确实会为其自身保留一个复制/粘贴缓冲区,并且默认情况下,emacs ^ k / ^ y快捷方式有效。