我的.emacs中有(cua-mode t),因此C-c是复制品,C-v就像我桌面上的大多数其他程序一样粘贴(Ubuntu,Gnome,Linux)。但是,Emacs似乎与其他程序不共享剪贴板/复制缓冲区。
例如,如果我在Firefox中使用C-c,我可以将S-C-v粘贴到终端或C-v中粘贴到gedit中。但是,如果我在emacs中使用C-v(或C-y),我就不会得到我从Firefox复制的内容。
有没有办法让这项工作?是否有其他命令可用于访问系统的复制粘贴缓冲区?
答案 0 :(得分:27)
我遇到了同样的问题。我把它添加到我的.emacs文件中:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
现在,Emacs和其他应用程序之间的Ctrl-C和Ctrl-v工作正常。 资料来源:Ubuntu Forums
答案 1 :(得分:15)
请参阅手册clipboard部分中的clipboard-yank
和clipboard-kill-region
。
答案 2 :(得分:12)
这适用于我的机器:
;; CUA OS copypasta even in ncurses mode
(case system-type
('darwin (unless window-system
(setq interprogram-cut-function
(lambda (text &optional push)
(let* ((process-connection-type nil)
(pbproxy (start-process "pbcopy" "pbcopy" "/usr/bin/pbcopy")))
(process-send-string pbproxy text)
(process-send-eof pbproxy))))))
('gnu/linux (progn
(setq x-select-enable-clipboard t)
(defun xsel-cut-function (text &optional push)
(with-temp-buffer
(insert text)
(call-process-region (point-min) (point-max) "xsel" nil 0 nil "--clipboard" "--input")))
(defun xsel-paste-function()
(let ((xsel-output (shell-command-to-string "xsel --clipboard --output")))
(unless (string= (car kill-ring) xsel-output)
xsel-output )))
(setq interprogram-cut-function 'xsel-cut-function)
(setq interprogram-paste-function 'xsel-paste-function))))
答案 3 :(得分:4)
也许此EmacsWiki页面会有所帮助,尤其是提及clipboard-kill-region
,clipboard-kill-ring-save
和clipboard-yank
的部分。
答案 4 :(得分:0)
我用autocutsel
解决了这个问题,它与emacs
以及我的其他Ubuntu系统一起使用。
autocutsel - keep the X clipboard and the cutbuffer in sync
我使用以下命令(运行一次,通常由我的窗口管理员"启动"机制或~/.xsession
调用):
autocutsel -fork
autocutsel -fork -selection PRIMARY
autocutsel
的第一个实例执行以下操作:
autocutsel跟踪[X11]服务器的剪切缓冲区和剪贴板选择中的更改。当剪贴板是 改变了,它更新了cutbuffer。切换缓冲区更改后,它拥有剪贴板选择。该 cutbuffer和剪贴板选择始终是同步的。
然而,通常会有第三个剪贴板,名为PRIMARY
,autocutsel
的第二个实例用于与其他两个实例同步。
这样做的好处是三个主要的剪贴板是统一的,因此通过中键单击粘贴当前选择或使用CTRL-C和CTRL-V的CUA样式复制/粘贴都可以一起工作。
这种方法的主要缺点是任何文本的自动突出显示(例如双击以突出显示emacs中的单词,或单击StackOverflow编辑字段中的BlockQuote图标)都会立即消除您的复制缓冲区。为了解决这个问题,我使用了一个剪贴板历史记录器,例如glipper
,它还可以方便地记录所有剪贴板内容,并允许我在这种情况下检索丢失的剪贴板内容。它可能需要一点点习惯,对我来说效果很好。作为替代方案,您可以尝试-pause
选项,该选项在进行选择之前会等待一段时间,这可能足以取消选择或删除任何自动选择的文本。不过,我无法获得足够好的结果。
请注意,此解决方案不需要任何特殊的emacs
配置,我在启用cua模式时使用该配置。