What is the best way to open remote files with emacs and ssh
Solution 1
I generally prefer opening remote files from a local Emacs instance.
While running Emacs on your local machine, opening a remote file over ssh is not much different than opening any other file besides a slightly different syntax.
For ssh, you can type C-x C-f
. Now, in the minubuffer you want to type /ssh:user@host:/path/to/file
(Note that tab completion will work once you start typing a path. Also note the leading /
character). See the full docs here.
In your example, that would be:
C-x C-f /ssh:[email protected]:/usr/share/nginx/html/index.html
Now you can edit remote files over ssh in Emacs while using your local configuration and any installed packages, etc...
Solution 2
Just to add to the answer above, you can write shortcuts for machines that you use frequently:
(defun connect-remote ()
(interactive)
(dired "/[email protected]:/"))
This will open a dired
buffer on a remote machine. You can navigate this buffer
as you would a local one.
If you have set up ssh keys for the remote machine, you don't even have to enter the password.
If you have a bunch of remote machines, you can give some recognizable name
to each function, e.g. connect-cupcake
, connect-kitkat
and use smex
package for completion.
Solution 3
And to add to @abo-abo's post about "shortcuts" --
Use Emacs bookmarks. Just create bookmarks normally, when you visit a remote file or directory. Then just use C-x r b
to jump to a remote bookmark, whose name you provide (with completion).
If you use Bookmark+ then remote bookmarks are highlighted specially in the *Bookmark List*
, so you can recognize them more easily. And remote bookmarks that must be accessed by su
or sudo
(root
) are highlighted differently.
If you use Dired+ then you can also quickly bookmark multiple remote files or directories, by visiting their containing remote directory in Dired, marking them, and hitting C-x b
. No need to give the bookmarks names; they are named after the files. Even if you never use those bookmarks for navigating to the remote files, you can use them with Bookmark+ tags to organize the files and thus operate on subsets of them.
If you use Icicles then whenever you use a command to jump to a bookmark, you can narrow the completion candidates to those that are remote by hitting C-M-@
during completion.
Solution 4
The original poster expressed interest in opening remote files as the root user. This can be done with the command:
C-x C-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET
More documentation can be found here: https://www.emacswiki.org/emacs/TrampMode#toc14
Solution 5
A Simple Answer that focuses on the remote machine:
If I plan to do all my emacs work on the remote machine, I use
ssh -X username@hostname
and then run emacs in the remote session, displaying back on my local machine. It's an old question but I wanted to throw this in for completeness. Granted there are some xhost / X config issues but in many networks this will work right off the bat!
Zeynel
I just installed Discourse forum on a home server (with a lot of help from kind folks here and SuperUser).
Updated on July 19, 2020Comments
-
Zeynel almost 4 years
I connect to the remote machine with
ssh [email protected]
. When I need to open a file in the remote machine I do, e.g.,emacs /usr/share/nginx/html/index.html
and that opens the
index.html
file in the shell. I noticed that some emacs commands work but others do not work. For instance,C-w
does not work;M-<
does not work. How can I fix this, and what is the best way to work with emacs and ssh?I found this question but it made me more confused.