【问题标题】:Buffer menu to select a set of filenames in Emacs在 Emacs 中选择一组文件名的缓冲区菜单
【发布时间】:2014-01-29 22:56:46
【问题描述】:

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

$ ls a
b  bcc  cc  ccdd

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

如何做到这一点?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    为了用一些代码来增加 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 设置为您的首选目录。

    【讨论】:

      【解决方案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会插入。

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

      【讨论】:

        【解决方案3】:
        • @Chris 所说的关于 HelmIdo 的所有内容也适用于 Icicles,并且具有更好的“缩小”功能和不同顺序的动态排序.

          无需额外操作 --- 只需加载 Icicles 并打开 Icicle 次要模式。每当您使用标准命令insert-file(绑定到C-x i)时,您都会免费获得您请求的行为。这种行为实际上可用于 Emacs 中的 all 补全。在 Icicle 模式下,标准命令变成了可以使用箭头键等的菜单。

        • 此外,您的问题标题要求能够“选择一个集合”文件。您可以在 Icicles 中轻松做到这一点,但并非如此。 IOW,选择也是多选。

          (但是,我怀疑您的问题标题有误,因为文本描述了不同的内容,并且我怀疑您是否要插入一个 set 文件。您可能表示您想从一组文件名中选择一个文件名。如果是,请考虑重新命名问题。)

        【讨论】:

          猜你喜欢
          • 2012-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多