184

シェルにドロップダウンして or を実行せずに、orsuを使用して既存の Emacs セッションでファイルを開きたいとします。これを行う1つの方法はsudosudoeditsudo emacs

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

ただし、これには SSH を介した高価な往復が必要です。もっと直接的な方法はありますか?

[編集] @JBBは正しいです。su/を呼び出しsudoて、開くだけでなく保存できるようにしたい。保存時に再認証しても問題ありません (理想的ではありません)。私が探しているのは、 /を介して「パイプ」できるfind-fileandのバリエーションです。save-buffersusudo

4

10 に答える 10

69

Tramp の優れた点は、最初のファイルを開いたときの SSH への往復料金のみを支払うことです。その後、Sudo は資格情報をキャッシュし、Emacs はハンドルを保存するため、後続の sudo で開かれたファイルの所要時間が大幅に短縮されます。

負担を軽減するために必要な余分な時間も見つけられませんでした。それは十分に速いです、IMO。

于 2008-09-19T02:17:30.400 に答える
64

TrampはSSH経由でsudoをラウンドトリップせず、サブシェルを使用します。マニュアルを参照してください:https ://www.gnu.org/software/tramp/#Inline-methods

したがって、TRAMPを使用することをお勧めします。

于 2010-01-15T12:25:48.187 に答える
16

元の質問に対する実際の回答ではありませんが、tramp/sudo ルートを少し簡単にするためのヘルパー関数を次に示します。

(defun sudo-find-file (ファイル名)
  「find file に似ていますが、root としてファイルを開きます。」
  (インタラクティブな「FSudo ファイル検索:」)
  (let ((トランプファイル名 (concat "/sudo::" (展開ファイル名 ファイル名))))
    (find-file トランプファイル名)))
于 2011-08-12T17:11:35.270 に答える
5

少なくとも保存に関しては、sudo-save パッケージはまさにその種の問題のために書かれています。

于 2010-06-17T12:19:18.393 に答える
5

あなたの例は、少なくとも私のバージョンのTRAMP(「2.1.13-pre」)では、sshをまったく開始しません。find-file と save-buffer の両方がうまく機能します。

于 2008-09-19T03:14:41.790 に答える
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でシェルを開いてsudoemacsを実行することができます。

問題は、おそらくファイルを開きたくないということです。後で保存できるようにしたい。したがって、ファイルを開くためだけに存在するのではなく、ルート特権を永続化する必要があります。

Emacsをウィンドウマネージャーにしたいと思っているようですね。それがなくても十分に肥大化しています。:)

于 2008-09-18T19:03:15.140 に答える