Aprire un file con su/sudo all'interno di Emacs
-
01-07-2019 - |
Domanda
Supponiamo che io voglia aprire un file esistente, Emacs sessione di utilizzo su
o sudo
, senza cadere verso il basso per una shell e facendo sudoedit
o sudo emacs
.Un modo per farlo è
C-x C-f /sudo::/path/to/file
ma questo richiede un costoso giro attraverso SSH.C'è un modo più diretto?
[EDIT] @JBB è giusto.Voglio essere in grado di richiamare su
/sudo
per salvare aperta.Sarebbe OK (ma non è l'ideale) per ri-autorizzare al momento del salvataggio.Quello che sto cercando è di variazioni di find-file
e save-buffer
che può essere "di sottofondo" attraverso su
/sudo
.
Soluzione
La cosa bella di Vagabondo è che si paga solo per il tragitto di andata e ritorno SSH quando apri il primo file.Sudo quindi memorizza nella cache le credenziali, e Emacs salva una maniglia, in modo che le successive sudo-i file aperti di prendere molto meno tempo.
Non ho trovato il tempo supplementare necessario per salvare gravare, sia.E ' abbastanza veloce, IMO.
Altri suggerimenti
Vagabondo fa non andata e ritorno sudo via SSH, utilizza un subshell.Vedi il manuale: https://www.gnu.org/software/tramp/#Inline-methods
Quindi, mi raccomando che si bastone con VAGABONDO.
Se si utilizza helm
, helm-find-files
supporta l'apertura di un file come root con C-c r
.
Non proprio una risposta alla domanda originale, ma qui è una funzione di supporto per fare il vagabondo/sudo percorso un po ' più facile:
(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)))
Almeno per il salvataggio, un sudo-salva pacchetto è stata scritta proprio per quel tipo di problema.
Il tuo esempio non si avvia ssh a tutti, almeno non con la mia versione di VAGABONDO ("2.1.13-pre").Trovare il file di salvataggio del buffer di grande lavoro.
Vi consiglio di utilizzare la consulenza comandi.Inserire questa funzione nel tuo ~/.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))))
(funziona solo in locale.Hanno bisogno di essere aggiornati per funzionare correttamente tramite il vagabondo)
Un po ' estesa Burton risposta:
(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.Forse si potrebbe aprire una shell in Emacs e exec sudo emacs.
Il problema è che, presumibilmente, non voglio solo aprire il file.Si vuole essere in grado di salvare più tardi.Quindi è necessario il root privs a persistere, non esistono solo per aprire il file.
Suona come si desidera Emacs per diventare il vostro window manager.È gonfio abbastanza, senza che.:)