Say for instance I'm editing a config file and I want to type in a path. Is there a plugin for emacs that lets you complete a file path in that buffer? I've searched for this and there's like a bazillion completion plugins out there.
Try Hippie Expand, which as one of it's possibilities has '
try-complete-file-name. You can change the order and list of expansion functions hippie expand will use to favor expanding the file name.
Or, you could even write a custom wrapper that would only do the file name expansion. Something like:
(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)))
I usually type Ctrl-X Ctrl-F like I would open a file, but instead of pressing RET I press Ctrl-A Ctrl-K Ctrl-G to copy the path and then paste it into the buffer I was editing with Ctrl-Y.
I don't need this often enough, but if I really wanted a better solution, I would definitely use Trey Jackson's solution using
hippie-expand. I thought about how
hippie-expand might be a better way to do this when first answering, but I didn't know and was too lazy to look it up, so I just wrote what I do.
Clunky and inelegant, but working. I have to admit to doing this from time to time myself. I'm still interested in a neater solution, though... Nov 7, 2009 at 21:56
Indeed. It doesn't really seem like a lot less work than typing it out manually though. Nov 8, 2009 at 14:00
1@Jason Baker: It depends on whether you know the exact file name or if you need to explore a bit for it.– TeddyNov 11, 2009 at 16:44
Up to version 25, the vanilla, out-of-the-box
both worked outside of comint mode. Of course, you can use the minibuffer's dynamic expansion to use less keystrokes to get to them (e.g., M-x comint-dynamic-complete-filename or M-x comint-replace-by-expanded-filename). Or, if you will be doing this frequently, you can bind them to key sequences of your choice using
For version 26+, it seems to me that you need to make sure that comint mode is explicitly loaded --- adding a line
in your .emacs file should make this work again.
Caveat: Not all applicable comint functions can be used this way. comint-dynamic-list-filename-completions doesn't seem to work outside of its native mode.
It is also possible to do this using the company autocompletion if the
company-files are in the list of
company-backends (default in my installation) or explicitly by calling
With Doom emacs, C-x C-f after typing the partial path, it works the charm!– Yu ShenJul 5, 2020 at 21:40
I recently discovered the works of Tomohiro Matsuyama (@m2ym) and I have been very impressed by the quality of its emacs packages.
I have struggled with most auto-completion extensions and found out that they all have major shortcomings.
Check out Tomo's auto-complete (http://auto-complete.org/doc/manual.html) it has been a breeze to install (I'm on Linux) and covers many auto-completion needs in a modern fashion.
Of course, your request for in-buffer file names completion is perfectly covered.
Finally, if you happen to do Ruby too, make sure not to miss his RSense extension; again, the best of its kind.
The link is broken– xuhdevApr 20, 2015 at 7:00
1And here is the new link: github.com/auto-complete/auto-complete/blob/master/doc/…– KrabNov 12, 2018 at 12:09
find-filefor instance). Do you want a similar behavior in a content buffer?