184

假设我想在现有的 Emacs 会话中使用suor打开一个文件sudo,而不是下拉到 shell 并执行sudoeditor sudo emacs。一种方法是

C-x C-f /sudo::/path/to/file

但这需要通过 SSH 进行昂贵的往返。有没有更直接的方法?

[编辑] @JBB 是对的。我希望能够调用su/sudo来保存和打开。保存时重新授权可以(但不理想)。我正在寻找的是 and 的变体find-filesave-buffer可以通过su/进行“管道传输” sudo

4

10 回答 10

69

Tramp 的好处在于,您只需在打开第一个文件时为 SSH 的往返支付费用。然后 Sudo 会缓存您的凭据,而 Emacs 会保存一个句柄,以便后续 sudo 打开的文件花费更少的时间。

我也没有发现节省负担所需的额外时间。它足够快,IMO。

于 2008-09-19T02:17:30.400 回答
64

Tramp 不通过SSH 往返 sudo,它使用subshel​​l。参见手册:https ://www.gnu.org/software/tramp/#Inline-methods

因此,我建议您坚持使用 TRAMP。

于 2010-01-15T12:25:48.187 回答
19

如果您使用helm,则helm-find-files支持以 root 身份打开文件C-c r

于 2015-06-27T19:25:48.257 回答
16

不是对原始问题的真正答案,但这里有一个帮助函数,可以让执行 tramp/sudo 路线更容易一些:

(defun sudo-find-file (文件名)
  “类似于查找文件,但以 root 身份打开文件。”
  (交互式“FSudo 查找文件:”)
  (let ((tramp-file-name (concat "/sudo::" (expand-file-name file-name))))
    (查找文件流浪汉文件名)))
于 2011-08-12T17:11:35.270 回答
5

您的示例根本没有启动 ssh,至少在我的 TRAMP 版本(“2.1.13-pre”)中没有。find-file 和 save-buffer 都很好用。

于 2008-09-19T03:14:41.790 回答
5

至少为了保存,一个sudo-save 包是专门针对这种问题编写的。

于 2010-06-17T12:19:18.393 回答
3

我建议您使用建议命令。将此函数放入您的 ~/.emacs

(defadvice ido-find-file (after find-file-sudo activate)
  "Find file as root if necessary."
  (unless (and buffer-file-name
               (file-writable-p buffer-file-name))
    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
于 2015-03-25T12:24:48.787 回答
1

(仅在本地工作。需要通过tramp更新才能正常工作)

稍微扩展了伯顿的回答:

(defun sudo-find-file (file-name)
"Like find file, but opens the file as root."
(interactive "FSudo Find File: ")
(let ((tramp-file-name (concat "/sudo::" (expand-file-name file-name))))
(find-file tramp-file-name)))


(add-hook 'dired-mode-hook
    (lambda ()
      ;; open current file as sudo 
      (local-set-key (kbd "C-x <M-S-return>") (lambda()
        (interactive)
        (message "!!! SUDO opening %s" (dired-file-name-at-point))
        (sudo-find-file (dired-file-name-at-point))
      ))
    )
)
于 2016-04-12T09:39:37.793 回答
0

啊。也许您可以在 Emacs 中打开一个 shell 并执行 sudo emacs。

问题是您可能不只是想打开文件。您希望以后能够保存它。因此,您需要您的根权限才能持久,而不仅仅是为了打开文件而存在。

听起来您希望 Emacs 成为您的窗口管理器。没有那个就够臃肿了。:)

于 2008-09-18T19:03:15.140 回答
0

我发现sudo edit功能对此非常有用。打开文件后,按s-esudo 访问以编辑/保存文件。

于 2021-08-21T06:37:00.983 回答