Emacs shell 模式在缓冲区中打开文件

Posted

技术标签:

【中文标题】Emacs shell 模式在缓冲区中打开文件【英文标题】:Emacs shell mode open file in buffer 【发布时间】:2014-02-26 16:33:52 【问题描述】:

我的设置:

Emacs 终端模式 (emacs -nw) 在其中,使用 shell 模式(使用 M-x ansi-term 调用) 在这个 shell 中,使用 ssh 连接到远程服务器

假设我正在 shell 中浏览远程服务器并找到我想要编辑的文件。是否有命令将其作为并行缓冲区/窗口打开?

我知道从shell打开文件的唯一方法是再次执行emacs -nw,这不太方便,因为a)我不保持shell打开并且b)它确实是一个不同的Emacs会话,所以例如“yank buffer”是不同的。

编辑:如果有一种不同/更好的方式来使用 Emacs 与远程服务器一起工作,我同样感兴趣;这就是我想要做的。

【问题讨论】:

【参考方案1】:

最好用tramp。

我有这个快捷方式(我用smex 调用它):

(defun connect-remote ()
  (interactive)
  (dired "/user@domain.com:/"))

这会在遥控器上打开一个 dired 缓冲区。您只需将其用作任何 dired 缓冲区即可。

我有一段时间可以从 dired 中打开一个术语,但我已经 刚刚添加了一个从tramp dired缓冲区进行ssh的选项:

(defun dired-open-term ()
  "Open an `ansi-term' that corresponds to current directory."
  (interactive)
  (let ((current-dir (dired-current-directory)))
    (term-send-string
     (terminal)
     (if (file-remote-p current-dir)
         (let ((v (tramp-dissect-file-name current-dir t)))
           (format "ssh %s@%s\n"
                   (aref v 1) (aref v 2)))
       (format "cd '%s'\n" current-dir)))))

(defun terminal ()
  "Switch to terminal. Launch if nonexistent."
  (interactive)
  (if (get-buffer "*terminal*")
      (switch-to-buffer "*terminal*")
    (term "/bin/bash")))

这是我使用的快捷方式:

(define-key dired-mode-map (kbd "`") 'dired-open-term)

【讨论】:

我无法使用 user@domain 作为参数调用 dired。它说它不存在... 你用“user2460978@domain-or-ip-address:/”替换了吗? 是的:如果我通常使用 $> ssh MyUser@MyServer 连接到服务器然后输入密码,我尝试使用 dired "/MyUser@MyServer:/" 并且回复是: Directory /home /xxx/"MyUser@MyServer:/" 无法访问或不存在 我已经设法修复它。谢谢。我必须补充一点,Dired 是这份工作的天堂。立即感受 Emacs 的力量 我收到以下错误:Setting current directory: No such file or directory【参考方案2】:

您可以在原始 emacs 会话中使用 tramp 通过 ssh 浏览远程服务器,使用 dired。然后,您打开的任何远程文件都会在本地 emacs 会话中打开。

如果您不想使用 dired 并希望使用 shell 浏览,您可以在文件名前添加远程位置 (/name@host:/path/from/pwd)。您可以使用函数将其自动化。

【讨论】:

您能详细说明一下这些选项吗?我是 Emacs 的新手。谢谢!

以上是关于Emacs shell 模式在缓冲区中打开文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在emacs中打开IPython解释器?

Emacs shell-mode 中的 Python 打开 stty echo 并中断 C-d

如何在 emacs 中创建一个空文件?

编写日志条目时防止GNU Emacs退出

5.Emacs快速入门之缓冲区

在 Emacs 中 C-x 2/3 时如何立即跳转到另一个窗口