我发现在 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
这是另一种方法:
M-x cd
将缓冲区的默认目录更改为所需的远程目录- 调用
M-x shell
,这将在远程计算机上打开一个 shell