代码之家  ›  专栏  ›  技术社区  ›  Charles Duffy

在Emacs中打开su/sudo文件

  •  165
  • Charles Duffy  · 技术社区  · 17 年前

    假设我想在现有Emacs会话中打开一个文件,使用 su sudo 不会掉到壳里去做 sudoedit sudo emacs . 一种方法是

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

    但这需要一个昂贵的 round-trip through SSH . 有更直接的方法吗?

    [编辑]@jbb是对的。我想能够调用 / 苏多 保存和打开。保存时可以重新授权(但不理想)。我要找的是 find-file save-buffer 可以通过管道 / 苏多 .

    9 回复  |  直到 17 年前
        1
  •  61
  •   EfForEffort    13 年前

    Tramp的好处在于,当您打开第一个文件时,您只需支付到ssh的往返费用。然后sudo会缓存您的凭证,emacs会保存一个句柄,这样随后打开的sudo文件所花费的时间就少得多。

    我也没有找到额外的时间来减轻负担。我觉得够快的。

        2
  •  62
  •   Teddy    11 年前

    流浪汉 通过ssh的往返sudo,它使用 亚壳层 . 请参阅手册: https://www.gnu.org/software/tramp/#Inline-methods

    因此,我建议你坚持流浪汉。

        3
  •  15
  •   Qudit    10 年前

    如果你使用 helm , helm-find-files 支持以根目录方式打开文件 C-c r .

        4
  •  13
  •   Burton Samograd    14 年前

    这并不是原始问题的答案,但这里有一个帮助函数,可以让您更轻松地执行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)))
    
        5
  •  5
  •   Francois G    15 年前

    至少对于储蓄来说, sudo-save package 正是为这种问题而写的。

        6
  •  4
  •   jfm3    17 年前

    您的示例根本不启动ssh,至少不使用我的Tramp版本(“2.1.13-pre”)。查找文件和保存缓冲区都很好。

        7
  •  2
  •   anquegi    11 年前

    我建议你使用建议命令。将此函数放入~/.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))))
    
        8
  •  1
  •   alex_1948511    10 年前

    (仅在本地工作。需要更新才能通过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))
          ))
        )
    )
    
        9
  •  0
  •   JBB    17 年前

    呃。也许你可以在emacs和exec sudo emacs中打开一个shell。

    问题是,您可能不只是想打开文件。您希望以后能够保存它。因此,您需要保持您的根特权,而不仅仅是为了打开文件而存在。

    听起来你想让Emacs成为你的窗口管理器。如果没有这个,它已经足够膨胀了。:)