如何将文本从Emacs复制到Linux上的另一个应用程序
当我剪切(杀死)Emacs 22.1.1中的文本时(在X、KDE、Kubuntu上的它自己的窗口中),我不能将其粘贴(yank)到任何其他应用程序中。Hmm,您使用的是什么平台和Emacs的哪个版本?Windows Vista上的GNU Emacs 22.1.1对我来说很好如何将文本从Emacs复制到Linux上的另一个应用程序,emacs,copy-paste,Emacs,Copy Paste,当我剪切(杀死)Emacs 22.1.1中的文本时(在X、KDE、Kubuntu上的它自己的窗口中),我不能将其粘贴(yank)到任何其他应用程序中。Hmm,您使用的是什么平台和Emacs的哪个版本?Windows Vista上的GNU Emacs 22.1.1对我来说很好 如果您通过RealVNC查看器从windows到linux执行此操作,请确保首先在linux设备上运行“vnconfig-icogal”…我要做的是使用一个内置复制功能的优秀终端工具(windows上的PuTTY、Konso
如果您通过RealVNC查看器从windows到linux执行此操作,请确保首先在linux设备上运行“vnconfig-icogal”…我要做的是使用一个内置复制功能的优秀终端工具(windows上的PuTTY、Konsole或linux上的terminal) 在PuTTY中,使用鼠标高亮显示所需的文本,然后将其粘贴到其他位置。在PuTTY窗口中单击鼠标右键将粘贴Windows复制/粘贴缓冲区的内容 在Konsole或Linux上的Terminal中,突出显示所需内容,然后按Shift+Ctrl+C进行复制,按Shift+Ctrl+V进行粘贴 在emacs的win32编译中,yanking text确实将其放在复制/粘贴缓冲区中。。大多数时候 在MacOSX上,Apple按键chortcuts工作正常,因为终端会捕获它们 在命令行上没有直接的方法,因为shell没有为每个应用程序维护复制/粘贴缓冲区。bash确实为自己维护了一个复制/粘贴缓冲区,默认情况下,emacs ^k/^y快捷方式可以工作。我总是使用快速粘贴--在emacs中拖动所选内容,在目标窗口中单击鼠标中键
(从kate的参考资料来看,我认为您使用的是linux或类似系统,可能以某种方式使用emacs。)您可能需要指定您使用的平台。它在linux、unix、macosx、windows和ms dos上运行吗 我相信对于windows来说,它应该可以工作。对于MacOSX,它将被添加到x-windows剪贴板,这与MacOSX剪贴板不同。对于Linux,这取决于您对窗口管理器的喜好,但我相信x-windows在大多数情况下都能很好地处理它
因此,请具体说明。这解释了X下复制和粘贴的一些问题以及如何将其配置为工作。我认为emacs指的是X下的emacs(即不在终端窗口内) 有两种方法:
- 剪贴板杀死环保存--复制 从Emacs到剪贴板的选择
- 剪贴板终止区域--剪切 从Emacs到剪贴板的选择
- 剪贴板猛拉--从中粘贴 剪贴板到Emacs
.emacs
文件中插入以下内容:
(setq x-select-enable-clipboard t)
让我们在这里小心定义
- Emacs副本是命令
(通常绑定到M-w)kill ring save
- 系统副本通常是通过按C-C键(或在应用程序窗口中选择“编辑->复制”)获得的
- X副本是用鼠标光标“物理”突出显示文本
- Emacs粘贴是命令
(通常绑定到C-y)yank
- 系统粘贴通常是通过按C-v键(或在应用程序窗口中选择“编辑粘贴”)获得的
- X粘贴按下“鼠标中键”(通过同时按下鼠标左键和右键模拟)
- Emacs和system copy通常都使用X paste
- X拷贝通常与Emacs粘贴一起使用
- 要使系统复制与Emacs粘贴一起工作,并使Emacs复制与系统粘贴一起工作,您需要将
添加到(setq x-select-enable-clipboard t)
中。或尝试.Emacs
META-X set-variable RET x-select-enable-clipboard RET t
同样重要的是要注意(尽管你说你在一个单独的窗口中使用Emacs),当Emacs在控制台中运行时,它与系统和X剪贴板完全分离:在这种情况下,剪切和粘贴是由终端进行的。例如,终端窗口中的“编辑->粘贴”的作用应该与将剪贴板中的文本键入Emacs缓冲区完全相同 我将其粘贴在.emacs中:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
随后,我基本上没有问题从Emacs中的任何东西来回剪切和粘贴到任何其他X11或Gnome应用程序
额外好处:为了让这些事情在Emacs中发生,而不必重新加载整个.Emacs,请在.Emacs缓冲区中的每个表达式关闭paren之后使用光标执行C-x C-e
祝你好运 在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)
这适用于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)
Source下面的代码受上面@RussellStewart答案的启发,增加了对x-PRIMARY和x-SECONDARY的支持,将
region-active-p
替换为use-region-p
,以覆盖空区域的情况,如果没有安装xsel,则不会自动返回(返回错误消息),并包含一个“cut”函数(emacs C-y、windows C-x)
基于这里的其他答案,我使用以下方法在Mac和Linux上复制并粘贴
C-xc-w
和C-xc-y
(如果有人知道Windows版本,请随意添加)。请注意,在Linux上,您必须使用软件包管理器安装xsel和xclip
;;与剪贴板交互的命令
(卸载osx副本(结束)
(交互式“r”)
(呼叫过程)
(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)