【发布时间】:2014-01-29 22:56:46
【问题描述】:
例如,我有一个目录"a",其中包含一组模板
$ ls a
b bcc cc ccdd
我想在 Emacs 中实现一个键盘快捷键,它将显示一个带有模板名称的缓冲区,类似于 dired 或 buffer-menu,然后能够使用箭头键或鼠标选择模板名称。然后将选中的模板插入到当前缓冲区的point处。
如何做到这一点?
【问题讨论】:
例如,我有一个目录"a",其中包含一组模板
$ ls a
b bcc cc ccdd
我想在 Emacs 中实现一个键盘快捷键,它将显示一个带有模板名称的缓冲区,类似于 dired 或 buffer-menu,然后能够使用箭头键或鼠标选择模板名称。然后将选中的模板插入到当前缓冲区的point处。
如何做到这一点?
【问题讨论】:
为了用一些代码来增加 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 设置为您的首选目录。
【讨论】:
insert-file,默认绑定到C-x i,可以将文件插入到缓冲区中,但它不会给你一个很好的菜单。 helm 和 ido 都增强了这种行为。
helm 不附带 Emacs,但可以通过 MELPA 安装。当helm-mode 处于活动状态时,insert-file 使用 Helm 的缩小功能。进入a 目录后,可以使用向上和向下键选择文件,Enter 将插入该文件。
ido 随 Emacs 一起提供。当ido-mode 处于活动状态时,C-x i 会反弹到ido-insert-file。进入a目录后,左右键可以用来选择文件,Enter会插入。
这两种工具都非常出色,都可以在许多其他情况下使用,并且都提供有效的过滤和导航。尝试一种或两种,然后使用您喜欢的任何一种。
【讨论】:
@Chris 所说的关于 Helm 和 Ido 的所有内容也适用于 Icicles,并且具有更好的“缩小”功能和不同顺序的动态排序.
无需额外操作 --- 只需加载 Icicles 并打开 Icicle 次要模式。每当您使用标准命令insert-file(绑定到C-x i)时,您都会免费获得您请求的行为。这种行为实际上可用于 Emacs 中的 all 补全。在 Icicle 模式下,标准命令变成了可以使用箭头键等的菜单。
此外,您的问题标题要求能够“选择一个集合”文件。您可以在 Icicles 中轻松做到这一点,但并非如此。 IOW,选择也是多选。
(但是,我怀疑您的问题标题有误,因为文本描述了不同的内容,并且我怀疑您是否要插入一个 set 文件。您可能表示您想从一组文件名中选择一个文件名。如果是,请考虑重新命名问题。)
【讨论】: