【问题标题】:Emacs filesets: how to run other (elisp, not shell) commands?Emacs 文件集:如何运行其他(elisp,而不是 shell)命令?
【发布时间】:2011-10-27 15:59:34
【问题描述】:

有 5 个 Elisp 命令可以在 Emacs 文件集上运行,此外还可以运行任何 shell 命令。那么所有其他 Emacs 命令呢?举一个例子,如果能够在一个文件集上运行 M-x 就很好了。

我知道可以在 dired 中标记几个文件,然后在它们上运行任何 Emacs 命令(这是真的,还是我与 shell 命令混淆了?),但是定义一个文件集然后是非常方便的能够像一个文件一样使用它来进行各种文本编辑。

感谢您的建议

【问题讨论】:

    标签: emacs command elisp dired fileset


    【解决方案1】:

    Dired+ 有命令 diredp-fileset,它在 Emacs 文件集上打开 Dired。系统会提示您输入要使用的文件集。

    【讨论】:

    • 我确实安装了 Dired+,但 M-x diredp-fileset 导致消息“未提供功能文件集”。
    • 这意味着库 filesets.el 不在您的 load-path 中。命令diredp-fileset 需要该库——该命令所做的第一件事是尝试加载该库。如果找不到,则会引发您看到的错误。 Emacs 22 及更高版本附带filesets.el。否则,您可能可以搜索它,但您可能需要确定它是否适用于您的 Emacs 版本。另请参阅 filesets+.el,它修复了 filesets.el 中的一些限制。
    • @Drew 这也可能意味着filesets-datanil。如果这个案例有不同的诊断信息,那就太好了。最好的问候,托比亚斯
    • @Tobias:好主意 - 完成了。请尝试最新的dired+.el
    【解决方案2】:

    通过Icicles,您可以将文件集用于您可能想要对一组文件和目录执行的任何操作。并且您可以在完成期间从缓冲区 Completions 中的任何文件和目录名称集创建文件集。并且你可以在补全过程中使用子字符串和正则表达式匹配来在Completions中得到这样一组文件名。

    这些链接可能会有所帮助:

    http://www.emacswiki.org/emacs/Icicles_-_Persistent_Completions#Filesets

    http://www.emacswiki.org/emacs/Icicles_-_Dired_Enhancements#OpenDiredOnSavedFiles

    http://www.emacswiki.org/emacs/Icicles_-_Dired_Enhancements#MarkedFilesAsProject

    http://www.emacswiki.org/emacs/Icicles_-_Customization_and_General_Tips#icicle-filesets-as-saved-completion-sets-flag

    【讨论】:

    • Emacs 宇宙似乎就像真实的宇宙——没有限制。谢谢,很棒的东西。
    【解决方案3】:

    可以对文件集进行操作的命令在全局自定义变量“filesets-commands”中指定。您可以将自己的命令添加到该列表中。该变量的默认值为:

    ("Isearch" multi-isearch-files
      (filesets-cmd-isearch-getargs))
     ("Isearch (regexp)" multi-isearch-files-regexp
      (filesets-cmd-isearch-getargs))
     ("Query Replace" perform-replace
      (filesets-cmd-query-replace-getargs))
     ("Query Replace (regexp)" perform-replace
      (filesets-cmd-query-replace-regexp-getargs))
     ("Grep <<selection>>" "grep"
      ("-n " filesets-get-quoted-selection " " "<<file-name>>"))
     ("Run Shell Command" filesets-cmd-shell-command
      (filesets-cmd-shell-command-getargs)))
    

    这些值由名称、函数的关联列表和要在文件集的文件上运行的参数列表(或返回值的函数)组成。因此,如果您想添加一个对文件集执行“发生”命令的命令,您可以使用“Isearch”条目作为示例来创建您自己的新条目(您将添加到“filesets-commands”全局变量)看起来像:

     ("Occur (regexp)" multi-occur-files-regexp
      (filesets-cmd-occur-getargs))
    

    您需要编写“multi-occur-files-regexp”和“filesets-cmd-occur-getargs”函数(您可以使用现有的“multi-isearch-files-regexp”和“filesets-cmd- isearch-getargs" 函数作为基础,因为它们相似)。这同样适用于您想要添加以处理文件集的任何其他 Emacs 命令。

    【讨论】:

      【解决方案4】:

      Dired 对文件集有几个操作。例如dired-do-search(绑定到A),您可以使用M-, 浏览多个文件的搜索结果,就像使用tags-search 一样。同样,您可以在标记文件中进行查询替换(使用Q)。

      irreal.org 上的最新帖子描述了一些不错的可怕功能。

      【讨论】:

      • 不错的链接 - 确实非常有趣的博客。并感谢 Dired 的提示,有很多东西要学习(并且要记住..)
      猜你喜欢
      • 1970-01-01
      • 2014-02-13
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多