当我在Emacs 22.1.1中剪切(杀死)文本时(在X上,在KDE中,在Kubuntu上的自己的窗口中),我无法在任何其他应用程序中粘贴(猛拉)它。
答案 0 :(得分:118)
我们在这里要小心我们的定义
kill-ring-save
(通常绑定到 M-w )。yank
(通常绑定到 C-y )。就我而言(在GNOME上):
要使系统复制与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缓冲区的方式完全相同。
答案 1 :(得分:88)
将以下内容插入.emacs
文件:
(setq x-select-enable-clipboard t)
答案 2 :(得分:10)
我坚持使用.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。
祝你好运!答案 3 :(得分:10)
在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)
答案 4 :(得分:7)
我认为,通过emacs,你的意思是X下的Emacs(即不在终端窗口内)。
有两种方法:
可用的剪贴板操作:
答案 5 :(得分:6)
有an EmacsWiki article解释了复制和放大的一些问题。在X下粘贴以及如何配置它以便工作。
答案 6 :(得分:4)
这适用于Mac OSX上的M-w
。只需添加到 .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)
答案 7 :(得分:1)
以下代码受@ RussellStewart上述答案的启发,增加了对x-PRIMARY和x-SECONDARY的支持,将region-active-p
替换为use-region-p
以涵盖空白区域的情况,如果尚未安装xsel(返回错误消息),并且包含" cut"功能(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)
答案 8 :(得分:0)
如果你有任何机会通过RealVNC查看器从windows到linux这样做,请确保你首先在linux机器上运行“vncconfig -iconic”......
答案 9 :(得分:0)
我总是在emacs中使用快速粘贴 - 拖动选择,在目标窗口中点击鼠标中键。
(从kate的引用中,我认为你是在Linux或类似的东西上,并且可能在X中以某种方式使用emacs。)
答案 10 :(得分:0)
您可能想要指定您正在使用的平台。它是在linux,unix,macosx,windows,ms-dos吗?
我相信对于Windows它应该有效。对于MacOSX,它将被添加到x-windows剪贴板,这与macosx剪贴板不同。对于Linux,它取决于你的窗口管理器的风格,但我相信x-windows在大多数窗口上以一种很好的方式处理它。
所以,请注明。
答案 11 :(得分:0)
根据其他答案,我使用以下内容将C-x C-w
和C-x C-y
复制并粘贴到Mac和Linux上(如果有人知道Windows的版本可以随意添加) )。请注意,在Linux上,您将必须使用包管理器安装xsel和xclip。
;; 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)))
答案 12 :(得分:-1)
我所做的是使用内置复制功能的好终端工具(Windows上的PuTTY,Linux上的Konsole或终端)。
在PuTTY中,您可以使用鼠标突出显示所需的文本,然后将其粘贴到其他位置。在PuTTY窗口中单击鼠标右键会粘贴Windows复制/粘贴缓冲区的内容。
在Linux上的Konsole或终端中,突出显示所需内容,然后按Shift + Ctrl + C进行复制,按Shift + Ctrl + V进行粘贴。
在emacs的win32编译中,yanking文本确实将它放在复制/粘贴缓冲区中..大部分时间。
在Mac OS X上,Apple-key chortcuts工作正常,因为Terminal会捕获它们。
在命令行上没有直接的方法,因为shell不为每个应用程序维护一个复制/粘贴缓冲区。 bash 为自己维护一个复制/粘贴缓冲区,默认情况下,emacs ^ k / ^ y快捷方式可以工作。