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

时间:2014-02-03 08:58:50

标签: shell emacs ssh terminal

我的设置:

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

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

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

编辑:如果有一个不同的/更好的方式与Emacs使用远程服务器我感兴趣;这就是我想要做的事情。

2 个答案:

答案 0 :(得分:6)

最好使用tramp。

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

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

这会在遥控器上打开一个直接缓冲区。你只需将它用作任何直接缓冲区。

我有一个函数可以从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)

答案 1 :(得分:2)

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

如果您希望避免使用dired并希望使用shell进行浏览,则可以将远程位置(/ name @ host:/ path / from / pwd)添加到文件名中。您可以使用函数自动执行该操作。