web-dev-qa-db-fra.com

Quelle est la meilleure façon d’ouvrir des fichiers distants avec emacs et ssh

Je me connecte à la machine distante avec ssh [email protected]. Lorsque je dois ouvrir un fichier sur la machine distante, je le fais, par exemple,

emacs /usr/share/nginx/html/index.html

et cela ouvre le index.html fichier dans le shell. J'ai remarqué que certaines commandes emacs fonctionnent mais que d'autres ne fonctionnent pas. Par exemple, C-w ne marche pas; M-< ne marche pas. Comment puis-je résoudre ce problème et quelle est la meilleure façon de travailler avec emacs et ssh?

J'ai trouvé cette question mais cela m'a rendu plus confus.

66
Zeynel

Je préfère généralement ouvrir des fichiers distants à partir d'une instance Emacs locale.

Lors de l’exécution d’Emacs sur votre machine locale , l’ouverture d’un fichier distant sur ssh n’est pas très différente de l’ouverture d’un fichier autre que légèrement syntaxe différente). .

Pour ssh, vous pouvez taper C-x C-f. Maintenant, dans le mini-tampon que vous voulez taper /ssh:user@Host:/path/to/file _ (Notez que la complétion de tabulation fonctionnera une fois que vous aurez commencé à taper un chemin. Notez également le / personnage). Voir le complet docs here .

Dans votre exemple, ce serait:

C-x C-f /ssh:[email protected]:/usr/share/nginx/html/index.html

Maintenant, vous pouvez éditer des fichiers distants sur ssh dans Emacs en utilisant votre configuration locale et tous les paquetages installés, etc.

125
Carl Groner

Juste pour ajouter à la réponse ci-dessus, vous pouvez écrire des raccourcis pour les machines que vous utilisez fréquemment:

(defun connect-remote ()
  (interactive)
  (dired "/[email protected]:/"))

Cela ouvrira un tampon dired sur une machine distante. Vous pouvez naviguer dans ce tampon comme vous le feriez avec un tampon local.

Si vous avez configuré des clés ssh pour la machine distante, vous n'avez même pas besoin de saisir le mot de passe.

Si vous avez plusieurs ordinateurs distants, vous pouvez attribuer un nom reconnaissable à chaque fonction, par exemple. connect-cupcake, connect-KitKat et utiliser le package smex pour le compléter.

23
abo-abo

Et d'ajouter au post de @ abo-abo à propos de "raccourcis" -

Utilisez les signets Emacs. Créez simplement des signets normalement lorsque vous visitez un fichier ou un répertoire distant. Ensuite, utilisez simplement C-x r b pour accéder à un signet distant dont vous indiquez le nom (avec complétion).

Si vous utilisez Bookmark + , les signets distants sont mis en surbrillance spécialement dans le *Bookmark List*, afin que vous puissiez les reconnaître plus facilement. Et les signets distants auxquels su ou Sudo (root) doit accéder sont mis en évidence différemment.

Si vous utilisez Dired + , vous pouvez également marquer rapidement plusieurs fichiers ou répertoires distants, en visitant leur répertoire distant contenu dans Dired, en les marquant et en appuyant sur C-x b. Pas besoin de donner les noms des signets; ils sont nommés d'après les fichiers. Même si vous n'utilisez jamais ces signets pour accéder aux fichiers distants, vous pouvez les utiliser avec Signet + tags pour organiser les fichiers et ainsi fonctionner sur des sous-ensembles de ceux-ci.

Si vous utilisez Des glaçons à chaque fois que vous utilisez une commande pour passer à un signet, vous pouvez limiter les candidats à l’achèvement à ceux qui sont distants en appuyant sur C-M-@ pendant l'achèvement.

17
Drew

L’affiche originale a exprimé son intérêt pour l’ouverture de fichiers distants en tant qu’utilisateur root. Cela peut être fait avec la commande:

C-x C-f /ssh:you@remotehost|Sudo:remotehost:/path/to/file RET

Plus de documentation peut être trouvée ici: https://www.emacswiki.org/emacs/TrampMode#toc14

5
Alex

Une réponse simple qui se concentre sur la machine distante:

Si je prévois de faire tous mes travaux emacs sur la machine distante, j’utilise

ssh -X username@hostname

puis lancez emacs dans la session distante et affichez-le sur ma machine locale. C'est une vieille question, mais je voulais ajouter cette précision. Certes, il y a des problèmes de configuration xhost/X mais dans de nombreux réseaux, cela fonctionnera immédiatement!

3
JimLohse

mode SSH pour emacs c'est ce que vous cherchez.

Une fois que vous l'avez configuré, il vous suffit de lancer

M-x ssh RET hostname RET

Ensuite, il vous invite à entrer votre mot de passe deux fois (une fois pour la ligne de commande, une fois pour charger des fichiers).

Pour la plupart, vous pouvez le traiter comme n'importe quel autre Shell (non interactif et quelques différences mineures, mais c'est tout).

Il enregistre le répertoire dans lequel vous vous trouvez. Ainsi, lorsque vous souhaitez ouvrir un fichier à partir du répertoire que vous consultez, il démarre automatiquement dans le bon répertoire et il vous suffit de saisir le nom du fichier.

Emacs Wiki a aussi plus d’informations.

1
Drake Sobania