(defun open-this-file-as-other-user (user) "Edit current file as USER, using `tramp' and `sudo'. If the current buffer is not visiting a file, prompt for a file name." (interactive "sEdit as user (default: root): ") (when (string= "" user) (setq user "root")) (let* ((filename (or buffer-file-name (read-file-name (format "Find file (as %s): " user)))) (tramp-path (concat (format "/sudo:%s@localhost:" user) filename))) (if buffer-file-name (find-alternate-file tramp-path) (find-file tramp-path))))