首页 / 知识

在Emacs中使用su / sudo打开文件

2023-04-17 08:01:00

在Emacs中使用su / sudo打开文件

Open a file with su/sudo inside Emacs

假设我想使用susudo在现有的Emacs会话中打开文件,而无需下拉至shell并执行sudoeditsudo emacs。 一种方法是

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

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

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


Tramp的好处是,您打开第一个文件时只需为往返SSH付费。然后,Sudo会缓存您的凭据,而Emacs将保存一个句柄,以便随后的sudo打开的文件花费的时间要少得多。

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


Tramp不会通过SSH来回传递sudo,它使用了一个subshel??l。请参阅手册:https://www.gnu.org/software/tramp/#Inline-methods

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


如果使用helm,则helm-find-files支持使用C-c r作为根文件打开文件。


这并不是对原始问题的真正答案,但是这里有一个帮助函数,可以使流浪汉/苏多路线的工作变得更加轻松:

1
2
3
4
5
(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)))

至少为了节省,为这种问题编写了一个sudo-save软件包。


您的示例根本不会启动ssh,至少不会以我的TRAMP版本(" 2.1.13-pre")启动。查找文件和保存缓冲区都很好。


我建议您使用建议命令。将此功能放在?/ .emacs中

1
2
3
4
5
(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))))

(仅在本地工作。需要更新以通过流浪汉正确工作)

伯顿的回答有点扩展:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(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))
      ))
    )
)

啊。也许您可以在Emacs和exec sudo emacs中打开一个shell。

问题是您大概不只是想要打开文件。您希望以后可以保存它。因此,您需要您的root privs持久存在,而不仅仅是存在于打开文件的过程中。

听起来您想让Emacs成为您的窗口管理器。没有它,它已经肿了。 :)


打开文件方法执行我想

最新内容

相关内容

猜你喜欢