如何在 emacs 中完成文件路径?

Jas*_*ker 15 emacs autocomplete elisp

比如说我正在编辑一个配置文件,我想输入一个路径。是否有 emacs 插件可以让您完成该缓冲区中的文件路径?我已经搜索过这个,那里有无数的补全插件。

Ted*_*ddy 17

我通常输入Ctrl- X Ctrl-F就像我打开一个文件一样,但不是按RET我按Ctrl- A Ctrl- K Ctrl-G复制路径,然后将其粘贴到我用Ctrl-编辑的缓冲区中Y

我并不经常需要这个,但如果我真的想要一个更好的解决方案,我肯定会使用 Trey Jackson 的解决方案,使用hippie-expand. 我hippie-expand在第一次回答时就想过如何更好地做到这一点,但我不知道并且懒得查,所以我只是写了所做的。


Tre*_*son 12

试试Hippie Expand,它的可能性之一是 ' try-complete-file-name。您可以更改 hippie expand 将使用的扩展函数的顺序和列表来支持扩展文件名。

或者,您甚至可以编写一个只进行文件名扩展的自定义包装器。就像是:

(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)))
Run Code Online (Sandbox Code Playgroud)


Ron*_*sky 10

最高版本 25,原版,开箱即用

M-x comint-dynamic-complete-filename
Run Code Online (Sandbox Code Playgroud)

M-x comint-replace-by-expanded-filename
Run Code Online (Sandbox Code Playgroud)

两者都在 comint 模式之外工作。当然,你可以使用迷你缓冲区的动态扩展,以使用更少的按键来得到他们(例如,的Mx COMI NT- DY namic- Ç omplete -f ilename或MX COMI NT-代表花边逐expanded- ˚F ilename)。或者,如果您经常这样做,您可以使用 将它们绑定到您选择的键序列global-set-key

对于 26+ 版本,在我看来您需要确保显式加载 comint 模式 --- 添加一行

(require 'comint)
Run Code Online (Sandbox Code Playgroud)

在您的 .emacs 文件中应该使这项工作再次发挥作用。

警告:并非所有适用的 comint 函数都可以这样使用。comint-dynamic-list-filename-completions似乎不能在其本机模式之外工作。


fik*_*nik 5

如果它们位于(我的安装中的默认值)列表中,也可以使用公司自动完成功能来执行此操作,或者通过调用显式地执行此操作。company-filescompany-backendscompany-files