【问题标题】:"yank" does not paste text when using Emacs over SSH通过 SSH 使用 Emacs 时,“yank”不粘贴文本
【发布时间】:2012-11-11 03:49:09
【问题描述】:

当我尝试通过 ssh 在远程服务器上运行 Emacs 时,C-y(甚至M-x yank)无法工作。 每次我按C-y 时,它都会显示“标记设置”,但没有其他任何反应。我在 Linux 下工作,远程服务器是 Mac pro。

现在我只能将文件下载到我的电脑上。关于如何更好地解决这个问题的任何想法?

【问题讨论】:

  • 不能真正解决您的问题,但您可以使用 Tramp 远程编辑文件。
  • (Emacs 一个开发工具,而这个一个客观答案的实际问题;因此这个问题此处的主题,即使它也可能是其他论坛的主题。)

标签: emacs ssh yank


【解决方案1】:

我怀疑您的问题不是由于 Emacs 远程运行,而是由于 Emacs 在“文本模式”下运行(即在终端模拟器中运行)。在这种模式下运行时,Emacs 不知道任何可能正在运行的周围 GUI,因此 C-y 仅通过 C-wM-w 之类的方式删除您之前在同一 Emacs 会话中杀死的文本。

您可以尝试在终端仿真器(可能是 Cmd-v)中进行“粘贴”,这会将选定的文本发送到底层应用程序(在本例中为 Emacs),就好像它已被键入一样。只要您粘贴的文本由“足够简单”的字符组成,它就可以正常工作。如果它包含任何有趣的控制字符,所有的赌注都被关闭(如果它包含非 ASCII 字符,它也可能以一种有趣的方式表现,这取决于整个“终端模拟器+ssh+Emacs”是否配置得恰到好处) .

【讨论】:

    【解决方案2】:

    文本模式不是我的问题。

    我有一个运行 emacs 的 macbook。我使用 tramp-mode 在 linux 机器上(远程)编辑文件。没有远程 emacs。都是本地的。

    我在 mac 上设置了这样的复制/粘贴,所以我可以从 emacs 之外的系统剪贴板中“拉出”:

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;; handle copy/paste intelligently
    (defun copy-from-osx ()
      "Handle copy/paste intelligently on osx."
      (let ((pbpaste (purecopy "/usr/bin/pbpaste")))
        (if (and (eq system-type 'darwin)
                 (file-exists-p pbpaste))
              (shell-command-to-string pbpaste))))
    
    (defun paste-to-osx (text &optional push)
      "Handle copy/paste intelligently on osx.
    TEXT gets put into the Macosx clipboard.
    
    The PUSH argument is ignored."
      (let* ((process-connection-type nil)
             (proc (start-process "pbcopy" "*Messages*" "pbcopy")))
        (process-send-string proc text)
        (process-send-eof proc)))
    
    (setq interprogram-cut-function 'paste-to-osx
          interprogram-paste-function 'copy-from-osx)
    

    显然,tramp-mode 试图变得聪明,当拉动文本时,它会运行我设置的 pbpaste 命令,远程。或者尝试。这是我不想要的。所以我把copy-from-osx修改成这样:

    (defun copy-from-osx ()
      "Handle copy/paste intelligently on osx."
      (let ((pbpaste (purecopy "/usr/bin/pbpaste")))
        (if (and (eq system-type 'darwin)
                 (file-exists-p pbpaste))
            (let ((tramp-mode nil)
                  (default-directory "~"))
              (shell-command-to-string pbpaste)))))
    

    请注意,它会在运行 pbpaste 之前临时将 tramp-mode 设置为 nil。

    为我工作。

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2011-04-26
      • 2017-06-08
      • 1970-01-01
      相关资源
      最近更新 更多