如何将文本从Emacs复制到Linux上的另一个应用程序

如何将文本从Emacs复制到Linux上的另一个应用程序

How to copy text from Emacs to another application on Linux

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


让我们小心这里的定义

  • Emacs副本是命令kill-ring-save(通常绑定到M-w)。
  • 通常通过按C-c(或在应用程序窗口中选择"编辑"->"复制")获得系统副本。
  • X副本是用鼠标光标"物理地"突出显示文本。
  • Emacs粘贴是命令yank(通常绑定到C-y)。
  • 通常,通过按C-v(或在应用程序窗口中选择"编辑-粘贴")可以得到系统粘贴。
  • X粘贴是按下"鼠标中键"(通过同时按下左右鼠标键来模拟)。

就我而言(在GNOME上):

  • Emacs和系统复制通常都可以使用X粘贴。
  • X复制通常与Emacs粘贴一起使用。
  • 要使系统复制与Emacs粘贴一起工作,并且使Emacs复制与系统粘贴一起工作,您需要在.emacs中添加(setq x-select-enable-clipboard t)。或尝试

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

我认为这是相当标准的现代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-wC-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快捷方式有效。


    推荐阅读

      linux文本查询命令?

      linux文本查询命令?,标准,命令,文件,工具,数据,信息,位置,系统,内容,文本,Lin

      linux压缩文本的命令?

      linux压缩文本的命令?,系统,图片,命令,设备,工具,位置,软件,管理,文件,目录,

      linux输入文本命令?

      linux输入文本命令?,系统,位置,电脑,工作,首开,命令,终端,模式,指令,字符,如

      linux替换文本命令?

      linux替换文本命令?,信息,系统,命令,内容,文件,文本,字符串,字符集,单词,字

      linux替换文本的命令?

      linux替换文本的命令?,系统,地址,工作,信息,命令,标准,数据,内容,文件,字符

      linux编辑文本命令行?

      linux编辑文本命令行?,工作,系统,信息,状态,地址,命令,管理,标准,目录,文件,L

      linux查看文本的命令?

      linux查看文本的命令?,系统,工作,标准,信息,命令,管理,数据,文件,目录,时间,L

      linux文本中插入命令?

      linux文本中插入命令?,工作,地址,系统,命令,信息,第一,工具,地方,密码,情况,L

      linux文本撤销命令?

      linux文本撤销命令?,系统,命令,信息,环境,状态,进程,程序,终端,快捷键,用户,

      linux命令中创建文本?

      linux命令中创建文本?,系统,时间,文件,终端,名字,名称,发行,命令,文件夹,文

      linux文本编辑命令?

      linux文本编辑命令?,工作,系统,地址,信息,环境,基础,命令,入口,网站,技术,lin

      查找文本的linux命令?

      查找文本的linux命令?,工具,命令,信息,系统,标准,文件,终端,情况,内容,字符

      linux文本下的命令?

      linux文本下的命令?,地址,工作,系统,标准,信息,命令,数据,目录,文件,控制台,L

      linux命令行文本比较?

      linux命令行文本比较?,时间,系统,标准,状态,代码,设备,工具,软件,文件,命令,l

      linux命令和应用程序?

      linux命令和应用程序?,软件,系统,环境,管理,基础,情况,位置,电脑,工具,中心,

      linux命令行文本移动?

      linux命令行文本移动?,系统,工作,地址,信息,命令,目录,文件,时间,管理,标准,l

      编辑文本的linux命令?

      编辑文本的linux命令?,工作,系统,信息,命令,标准,数据,资料,目录,文件,操作,L

      linux命令筛选文本?

      linux命令筛选文本?,管理,系统,基础,分析,工具,标准,数据,信息,命令,报告,lin

      linux下编辑文本命令?

      linux下编辑文本命令?,工作,系统,信息,命令,情况,时间,标的,设备,发行,文件,l