我使用 ssh user@192.168.1.5
连接到远程机器。当我需要在远程机器上打开一个文件时,例如,
emacs /usr/share/nginx/html/index.html
并在 shell 中打开 index.html
文件。我注意到一些 emacs 命令有效,但其他命令无效。例如,C-w
不起作用; M-<
不起作用。我该如何解决这个问题,以及使用 emacs 和 ssh 的最佳方式是什么?
我找到了 this question,但这让我更加困惑。
M-x describe-mode
。
我通常更喜欢从本地 Emacs 实例打开远程文件。
在您的本地机器上运行 Emacs 时,通过 ssh 打开远程文件与打开任何其他文件没有太大区别,只是稍微有点 different syntax。
对于 ssh,您可以输入 C-x C-f
。现在,在 minubuffer 中您要输入 /ssh:user@host:/path/to/file
(请注意,一旦您开始输入路径,制表符补全就会起作用。还要注意前导 /
字符)。请参阅完整的 docs here。
在您的示例中,这将是:
C-x C-f /ssh:user@192.168.1.5:/usr/share/nginx/html/index.html
现在,您可以在 Emacs 中通过 ssh 编辑远程文件,同时使用本地配置和任何已安装的包等...
只是为了添加到上面的答案,您可以为您经常使用的机器编写快捷方式:
(defun connect-remote ()
(interactive)
(dired "/user@192.168.1.5:/"))
这将在远程计算机上打开一个 dired
缓冲区。您可以像浏览本地缓冲区一样导航此缓冲区。
如果您已经为远程机器设置了 ssh 密钥,您甚至不必输入密码。
如果你有一堆远程机器,你可以给每个函数起一个可识别的名字,例如connect-cupcake
、connect-kitkat
并使用smex
包完成。
/usr/share/nginx/html/index.html
;但是当我用 ssh 打开它时,index.html
是只读的。为什么是这样?
/usr/share/
。
C-x C-f /sudo ssh:user@host filename
的方法,但这不起作用。
chown
的 /usr/share/nginx/html/
文件夹的所有者。
/etc/nginx/sites-available/example.com.conf
并对其进行了编辑并保存并关闭了它。现在我再次打开它,这一次我不能编辑它?我认为它必须与权限有关。你能帮我理解为什么会这样吗?
并添加到@abo-abo 的关于“快捷方式”的帖子中——
使用 Emacs 书签。 当您访问远程文件或目录时,只需正常创建书签。然后只需使用 C-x r b
跳转到您提供的远程书签(带有完成)。
如果您使用 Bookmark+,那么远程书签会在 *Bookmark List*
中特别突出显示,因此您可以更轻松地识别它们。并且必须由 su
或 sudo
(root
) 访问的远程书签以不同的方式突出显示。
如果您使用 Dired+,那么您还可以快速为多个远程文件或目录添加书签,方法是访问 Dired 中包含它们的远程目录,标记它们,然后点击 C-x b
。无需给书签名称;它们以文件命名。即使您从不使用这些书签导航到远程文件,您也可以将它们与 Bookmark+ tags 一起使用来组织文件,从而对它们的子集进行操作。
如果您使用 Icicles,那么每当您使用命令跳转到书签时,您都可以通过在完成期间点击 C-M-@
将完成候选范围缩小到那些远程的候选对象。
原始发帖人表示有兴趣以 root 用户身份打开远程文件。这可以通过以下命令完成:
C-x C-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET
可在此处找到更多文档:https://www.emacswiki.org/emacs/TrampMode#toc14
一个专注于远程机器的简单答案:
如果我打算在远程机器上完成我所有的 emacs 工作,我使用
ssh -X username@hostname
然后在远程会话中运行 emacs,显示在我的本地机器上。这是一个老问题,但为了完整起见,我想把它扔进去。当然存在一些 xhost / X 配置问题,但在许多网络中,这将立即生效!
SSH mode for emacs 是您要查找的内容。
设置好后,您只需运行
M-x ssh RET hostname RET
然后它会提示您输入两次密码(一次用于命令行,一次用于加载文件)。
在大多数情况下,您可以像对待任何其他 shell 一样对待它(非交互式和一些小的差异,但仅此而已)。
它会跟踪您所在的目录,因此当您要从正在查看的目录中打开文件时,它会自动从正确的目录开始,您只需输入文件名。
Emacs Wiki 也有更多信息。
不定期副业成功案例分享
tramp
,它是您将使用的最有用的东西之一。它甚至可以远程编译!index.html
,因为它说缓冲区是只读的。但是如果我在远程计算机上打开,我可以编辑同一个文件。顺便说一句,当我用C-x C-f /ssh:user@host filename
打开文件时,它问我密码。/method:user@host#port:filename