我有一个目录"a"
,其中包含一组模板,例如
$ ls a
b bcc cc ccdd
我想在Emacs中实现一个键盘快捷键,它将显示一个带有模板名称的缓冲区,类似于dired
或buffer-menu
,然后可以使用箭头键选择模板名称或老鼠。然后将所选模板插入当前缓冲区。
如何做到这一点?
答案 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
可以在一点上将文件插入缓冲区,但它不会给你一个很好的菜单。 helm
和ido
都会增强此行为。
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,选择也是多选。
(但是,我怀疑你的问题是错误的,因为文本描述了不同的内容,我怀疑你想要插入 文件。你可能意味着您要从一组文件名中选择一个文件名。如果是这样,请考虑重新调整问题。)