Öffnen Sie eine Datei mit su / sudo innerhalb von Emacs
-
01-07-2019 - |
Frage
Angenommen, ich eine Datei in einer vorhandenen Emacs-Sitzung mit su
oder sudo
öffnen möge, ohne auf eine Shell fiel nach unten und sudoedit
oder sudo emacs
tun. Eine Möglichkeit, dies zu tun ist,
C-x C-f /sudo::/path/to/file
Dies erfordert jedoch eine teure rel="noreferrer">. Gibt es einen direkteren Weg?
[EDIT] @JBB ist richtig. Ich möchte in der Lage sein su
/ sudo
zu speichern sowie offene aufzurufen. Es wäre in Ordnung sein (aber nicht ideal) erneut autorisieren beim Speichern. Was ich suche ist Variationen von find-file
und save-buffer
, die „geleitet“ durch su
/ sudo
sein kann.
Lösung
Das Schöne an Tramp ist, dass Sie nur für die Hin- und Rückfahrt zu SSH zahlen, wenn Sie die ersten Datei öffnen. Sudo dann speichert Ihre Anmeldeinformationen und Emacs speichert einen Griff, so dass nachfolgende sudo geöffneten Dateien viel weniger Zeit in Anspruch nehmen.
Ich habe nicht die zusätzliche Zeit es braucht, um zu sparen zu belasten, entweder gefunden. Es ist schnell genug, meiner Meinung nach.
Andere Tipps
Tramp hat nicht Round-Trip-sudo via SSH, verwendet es eine Subshell . Siehe Handbuch: https://www.gnu.org/software/tramp/#Inline -Methoden
Daher empfehle ich, dass Sie mit TRAMP bleiben.
Wenn Sie helm
verwenden, helm-find-files
unterstützt eine Datei als root mit C-c r
öffnen.
Nicht wirklich eine Antwort auf die ursprüngliche Frage, aber hier ist eine Hilfsfunktion zu tun Strolch / sudo Route ein wenig leichter zu machen:
(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)))
Mindestens für das Speichern, ein Paket sudo-save genau für diese Art von Problem geschrieben wurde .
Ihr Beispiel nicht startet ssh überhaupt, zumindest nicht mit meiner Version von TRAMP ( „2.1.13-pre“). Beide finden-Datei und speichern-Puffer Arbeit groß.
Ich empfehle Ihnen, Befehle Beratung zu nutzen. Setzen Sie diese Funktion in Ihrem ~ / .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))))
(funktioniert nur lokal. Müssen aktualisiert werden korrekt über tramp arbeiten)
Ein wenig erweitert Burton Antwort:
(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))
))
)
)
Ugh. Vielleicht könnten Sie eine Shell in Emacs und exec sudo emacs öffnen.
Das Problem ist, dass Sie vermutlich einfach nicht die Datei geöffnet werden soll. Sie wollen, dass es in der Lage sein später zu speichern. So müssen Sie Ihre Wurzel privs bestehen bleiben, nicht nur für die existieren, um die Datei zu öffnen.
Klingt wie Sie Emacs möchten Ihre Window-Manager werden. Es ist aufgebläht genug, ohne dass. :)