在 emacs 中直接使用 tramp 打开远程 shell

在 emacs 中直接使用 tramp 打开远程 shell

我发现在 emacs 中,在远程机器上运行 shell 的最佳方法是使用 TRAMP(使用ssh本地 shell 中的命令无法满足我的需求)。但是,我只知道如何在首先使用访问远程文件C-x C-f然后M-x shell从该缓冲区执行操作时运行 TRAMP shell。但是,我想在远程机器上使用 TRAMP 打开一个 shell,打开该远程主机上的任何文件,但在搜索中找不到有关如何执行此操作的任何说明。可以这样做吗?

答案1

当默认目录是远程时,Tramp 就会发挥作用。因此,您可以更改它,就像提前打开远程文件(或目录)一样。

但你可以编写如下小命令:

(defun my-shell () (interactive) (let ((default-directory "/ssh:user@host:")) (shell)))

然后你可以打电话M-x my-shell

答案2

我用迪雷德访问远程机器并在那里打开 shell。

这是我使用的函数,取自并修改自Tikhon Jelviss 的 emacs 配置

(defun anr-shell (buffer)
  "Opens a new shell buffer where the given buffer is located."
  (interactive "sBuffer: ")
  (pop-to-buffer (concat "*" buffer "*"))
  (unless (eq major-mode 'shell-mode)
    (dired buffer)
    (shell buffer)
    (sleep-for 0 200)
    (delete-region (point-min) (point-max))
    (comint-simple-send (get-buffer-process (current-buffer)) 
                        (concat "export PS1=\"\033[33m" buffer "\033[0m:\033[35m\\W\033[0m>\""))))

例子:

(anr-shell "/vagrant@localhost#2222:/vagrant/")

答案3

虽然手册中没有明确说明C-u M-x shell允许您指定 shell 缓冲区的名称,更重要的是,在您的情况下允许您指定Default directory,它可以像 Tramp 一样采用字符串/ssh:server:/my/path

另一种方法是打开 dired ( C-x d) 而不是实际文件,如果您M-x shell从目录打开,shell 将使用 dired 目录的上下文打开。

答案4

这是另一种方法:

  1. M-x cd将缓冲区的默认目录更改为所需的远程目录
  2. 调用M-x shell,这将在远程计算机上打开一个 shell

相关内容