Откройте файл с su / sudo внутри Emacs
предположим, я хочу открыть файл в существующем сеансе Emacs с помощью su
или sudo
, не опускаясь до оболочки и делая sudoedit
или sudo emacs
. Один из способов сделать это
C-x C-f /sudo::/path/to/file
но для этого требуется дорогой туда и обратно через SSH. Есть ли более прямой путь?
[EDIT] @JBB прав. Я хочу иметь возможность вызывать su
/sudo
сохранить как и открыть. Было бы хорошо (но не идеально) повторно авторизоваться при сохранении. Что я такое ищем это вариации find-file
и save-buffer
это может быть "пропущено" через su
/sudo
.
9 ответов:
хорошая вещь о бродяге заключается в том, что вы платите только за эту поездку туда и обратно в SSH, когда открываете первый файл. Затем Sudo кэширует ваши учетные данные, а Emacs сохраняет дескриптор, так что последующие файлы, открытые sudo, занимают гораздо меньше времени.
Я не нашел дополнительное время, необходимое, чтобы сэкономить обременение, либо. Это достаточно быстро, ИМО.
Бродяга делает не туда и обратно sudo через SSH, он использует subshell. Смотрите инструкцию:https://www.gnu.org/software/tramp/#Inline-methods
поэтому я рекомендую вам придерживаться бродяги.
не совсем ответ на исходный вопрос, но вот вспомогательная функция, чтобы сделать маршрут tramp/sudo немного проще:
(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)))
по крайней мере для экономии, a sudo-сохранить пакет был написан именно для такого рода проблем.
ваш пример вообще не запускает ssh, по крайней мере, не с моей версией TRAMP ("2.1.13-pre"). Как найти-файл, так и сохранить-буфер отлично работают.
Я рекомендую вам использовать консультирует команды. Поместите эту функцию в свой~/.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))))
тьфу. Возможно, вы могли бы открыть оболочку в Emacs и exec sudo emacs.
проблема в том, что вы, вероятно, не просто хотите открыть файл. Вы хотите, чтобы иметь возможность сохранить его позже. Таким образом, вам нужно, чтобы ваши корневые привы сохранялись, а не просто существовали для открытия файла.
Похоже, вы хотите, чтобы Emacs стал вашим оконным менеджером. Он и без того достаточно раздут. :)
(работает только локально. Необходимо обновить, чтобы правильно работать через бродягу)
немного расширил ответ Бертона:
(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)) )) ) )