Comment puis-je compléter les chemins de fichiers dans emacs?

14

Supposons par exemple que j'édite un fichier de configuration et que je souhaite saisir un chemin. Existe-t-il un plugin pour emacs qui vous permet de compléter un chemin de fichier dans ce tampon? J'ai cherché cela et il y a comme un bazillion de plugins d'achèvement.

Jason Baker
la source
1
Je ne sais pas exactement ce que vous demandez ici. Les emacen modernes ont un chemin complet dans le mini-tampon (lors de l'utilisation find-filepar exemple). Voulez-vous un comportement similaire dans un tampon de contenu?
dmckee --- chaton ex-modérateur
1
@dmckee - Oui, c'est en fait exactement ce que je recherche.
Jason Baker,
@dmckee Ce système d'exploitation est-il spécifique? J'ai eu l'achèvement du nom de fichier dans Find File dans Ubuntu mais il n'y a pas d'achèvement dans OSX. Par exemple, j'ai un fichier appelé "référence" à la racine et je suis dans un mini tampon: "Trouver le fichier: ~ /" et j'entre "ref" et je m'attends à ce qu'il se termine mais rien ne se passe. Dois-je installer quelque chose?
Zeynel
@Zeynel fonctionne aussi très bien pour moi sous Mac OS. Soit avec la version installée par Apple ou la version homebrew. Fonctionne également avec la version fink sur mon ancienne machine.
dmckee --- chaton ex-modérateur
@dmckee Strange. Peut-être que je pose une nouvelle question. Merci.
Zeynel

Réponses:

10

Essayez Hippie Expand , qui est l'une de ses possibilités » try-complete-file-name. Vous pouvez modifier l'ordre et la liste des fonctions d'expansion que hippie expand utilisera pour favoriser l'expansion du nom de fichier.

Ou, vous pouvez même écrire un wrapper personnalisé qui ne ferait que l'extension du nom de fichier. Quelque chose comme:

(global-set-key (kbd "C-M-/") 'my-expand-file-name-at-point)
(defun my-expand-file-name-at-point ()
  "Use hippie-expand to expand the filename"
  (interactive)
  (let ((hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name)))
    (call-interactively 'hippie-expand)))
Trey Jackson
la source
14

Je tape habituellement Ctrl- X Ctrl- Fcomme j'ouvrirais un fichier, mais au lieu d'appuyer sur, RETj'appuie sur Ctrl- A Ctrl- K Ctrl- Gpour copier le chemin, puis le coller dans le tampon avec lequel je modifiais Ctrl- Y.

Je n'en ai pas besoin assez souvent, mais si je voulais vraiment une meilleure solution, j'utiliserais certainement la solution de Trey Jackson en utilisant hippie-expand. J'ai pensé à la hippie-expandmeilleure façon de le faire lors de la première réponse, mais je ne savais pas et j'étais trop paresseux pour le rechercher, alors j'ai simplement écrit ce que je fais.

Teddy
la source
Clunky et inélégant, mais fonctionnant. Je dois admettre que je le fais de temps en temps moi-même. Je suis toujours intéressé par une solution plus
soignée
En effet. Cela ne semble pas vraiment être beaucoup moins de travail que de le taper manuellement.
Jason Baker,
1
@Jason Baker: Cela dépend si vous connaissez le nom exact du fichier ou si vous devez l'explorer un peu.
Teddy
6

La vanille, prête à l'emploi

M-x comint-dynamic-complete-filename

fonctionne en dehors du mode comint. Bien sûr, vous pouvez utiliser l' expansion dynamique du mini - tampon pour utiliser moins de touches pour y accéder (par exemple, Mx Comi nt- dy namic- c omplete -f ilename). Ou, si vous l'utilisez fréquemment, vous pouvez le lier à une séquence de touches de votre choix à l'aide de global-set-key.

Ron Kaminsky
la source
2

Il est également possible de le faire en utilisant la saisie semi - automatique de l' entreprise si le company-filessont dans la liste de company-backends(par défaut dans mon installation) ou explicitement en appelant company-files.

fikovnik
la source
0

J'ai récemment découvert les œuvres de Tomohiro Matsuyama (@ m2ym) et j'ai été très impressionné par la qualité de ses packages emacs.

J'ai rencontré des difficultés avec la plupart des extensions de complétion automatique et j'ai découvert qu'elles présentaient toutes des lacunes majeures.

Découvrez l'auto-complétion de Tomo ( http://auto-complete.org/doc/manual.html ), l'installation a été un jeu d'enfant (je suis sous Linux) et couvre de nombreux besoins d'auto-complétion de manière moderne .

Bien sûr, votre demande de complétion des noms de fichiers dans la mémoire tampon est parfaitement couverte.

Enfin, si vous faites aussi Ruby, assurez-vous de ne pas manquer son extension RSense ; encore une fois, le meilleur du genre.

Arnaud Meuret
la source
Le lien est rompu
xuhdev