通过SSH使用Emacs时,“yank”不会粘贴文本

时间:2012-11-22 17:54:35

标签: emacs ssh yank

当我尝试通过ssh在远程服务器上运行Emacs时,C-y(偶数M-x yank)无效。 每次按C-y时,都会显示“标记设置”,但没有其他事情发生。我在Linux下工作,远程服务器是Mac专业版。

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

2 个答案:

答案 0 :(得分:6)

我怀疑你的问题不是因为Emacs远程运行,而是因为Emacs在"文本模式下运行" (即在终端仿真器内运行)。在这种模式下运行时,Emacs不知道可能正在运行的任何周围的GUI,因此C-y只会通过C-w或{{1}之类的东西来攻击您之前在同一个Emacs会话中被杀死的文本。 }}

您可以尝试粘贴"在您的终端仿真器(可能是Cmd-v)中,它将选定的文本发送到底层应用程序(在本例中为Emacs),就像它已被键入一样。只要您粘贴的文字由"简单而制作"字符它可能工作正常。如果它包含任何有趣的控制字符,则所有投注都会关闭(如果它包含非ASCII字符,它也可能以有趣的方式运行,具体取决于是否配置了整个"终端模拟器+ ssh + Emacs"是对还是没有。)

答案 1 :(得分: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试图变得聪明,并且在yanking文本时,它运行我已设置的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。

适合我。