当我试图通过ssh在远程服务器上运行Emacs时,C-y
(甚至M-x yank
)无法工作。每当我按下C-y
时,它会说“Mark set”,但没有其他事情发生。我在Linux下工作,远程服务器是Mac专业版。
现在我只能将文件下载到我的电脑上。关于如何更好地解决这个问题的任何想法?
我怀疑你的问题不是因为Emacs远程运行,而是因为Emacs以“文本模式”运行(即在终端模拟器内运行)。在这种模式下运行时,Emacs不知道可能正在运行的任何周围的GUI,因此C-y
只会通过像C-w
或M-w
这样的东西在同一个Emacs会话中查找您之前杀死的文本。
您可以尝试在终端仿真器(可能是Cmd-v)中进行“粘贴”,这会将所选文本发送到底层应用程序(在本例中为Emacs),就像它已被键入一样。只要您粘贴的文本由“足够简单”的字符组成,它就可以正常工作。如果它包含任何有趣的控制字符,所有的注意都是关闭的(如果它包含非ASCII字符,它也可能表现得很有趣,这取决于整个“终端模拟器+ ssh + Emacs”是否配置得恰到好处) 。
文本模式的东西不是我的问题。
我有一个macbook,我运行emacs。我使用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。
适合我。