缓冲区菜单,用于在Emacs中选择一组文件名

时间:2014-01-29 11:50:11

标签: emacs elisp

我有一个目录"a",其中包含一组模板,例如

$ ls a
b  bcc  cc  ccdd

我想在Emacs中实现一个键盘快捷键,它将显示一个带有模板名称的缓冲区,类似于diredbuffer-menu,然后可以使用箭头键选择模板名称或老鼠。然后将所选模板插入当前缓冲区。

如何做到这一点?

3 个答案:

答案 0 :(得分:3)

用一些代码来增加Chris的回答,这里是ido-insert-file的一个小包装:

(require 'ido)

(defvar so/template-directory "/tmp/templates"
  "Directory where template files are stored")

(defun so/insert-template ()
  (interactive)
  (let ((default-directory so/template-directory))
    (ido-insert-file)))

这允许您运行(或绑定密钥)so/insert-template,无论您当前在哪个目录中。显然将so/template-directory设置为您的首选目录。

答案 1 :(得分:2)

默认情况下绑定到insert-file

C-x i可以在一点上将文件插入缓冲区,但它不会给你一个很好的菜单。 helmido都会增强此行为。

helm没有附带Emacs,但它可以通过MELPA安装。当helm-mode处于有效状态时,insert-file会使用Helm的缩小功能。进入a目录后,可以使用向上和向下键选择文件,然后 Enter 将其插入。

ido随Emacs一起提供。当ido-mode处于有效状态时,C-x i会反弹为ido-insert-file。一旦进入a目录,左右键可用于选择文件, Enter 将插入该文件。

这两种工具都非常出色,都可以在许多其他情况下使用,并且都提供有效的过滤和导航。尝试其中一个或两个并使用您喜欢的任何一个。

答案 2 :(得分:2)

  • @Chris所说的关于 Helm Ido 的所有内容也适用于Icicles,并且具有更好的“缩小”功能并且在此基础上以不同的顺序飞行排序。

    没有什么可以做的 - 只需加载冰柱并打开 Icicle 次要模式。每当您使用标准命令insert-file(绑定到C-x i)时,您将获得免费请求的行为。实际上,此行为可用于Emacs中的所有完成。在 Icicle 模式下,标准命令成为可以使用箭头键等的菜单。

  • 此外,您的问题标题要求“选择设置 ”文件。你可以在冰柱中轻松完成,但不能这样做。 IOW,选择也是多选。

    (但是,我怀疑你的问题是错误的,因为文本描述了不同的内容,我怀疑你想要插入 文件。你可能意味着您要从一组文件名中选择一个文件名。如果是这样,请考虑重新调整问题。)