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

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

比如说,我正在编辑一个配置文件,我想输入一个路径。是否有一个 emacs 插件可以让你在缓冲区中完成文件路径?我搜索过这个,发现有无数个完成插件。

答案1

尝试嬉皮士 展开,其可能性之一是 ' 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)))

答案2

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

我并不经常需要这个,但如果我真的想要一个更好的解决方案,我肯定会使用 Trey Jackson 的解决方案hippie-expand。我第一次回答的时候就想过如何hippie-expand做可能会有更好的方法,但我不知道,也懒得去查,所以我就写了做。

答案3

截至版本 25,开箱即用的原始版本

M-x comint-dynamic-complete-filename

M-x comint-replace-by-expanded-filename

两者都可以在 comint 模式之外工作。当然,您可以使用 minibuffer 的动态扩展来减少按键次数(例如 Mx共同利益nt-纳米克C完整-Filename 或 Mx共同利益nt-代表花边扩展Filename)。或者,如果您经常这样做,您可以使用 将它们绑定到您选择的按键序列global-set-key

对于版本 26+,我认为你需要确保明确加载了 comint 模式 --- 添加一行

(require 'comint)

在你的 .emacs 文件中应该可以让它再次工作。

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

答案4

我最近发现了 Tomohiro Matsuyama(@m2ym)的作品,其 emacs 包的质量给我留下了深刻的印象。

我曾对大多数自动完成扩展进行过努力,并发现它们都存在重大缺陷。

查看 Tomo 的自动完成功能 (http://auto-complete.org/doc/manual.html)安装起来非常简单(我在 Linux 上),并且能够满足许多自动完成的需求现代的时尚。

当然,您对缓冲区文件名完成的请求已经得到完美满足。

最后,如果你碰巧也使用 Ruby,请务必不要错过他的电阻感测扩展;同样,是同类产品中最好的。

相关内容