有 5 个 Elisp 命令可以在 Emacs 文件集上运行,此外还可以运行任何 shell 命令。那么所有其他 Emacs 命令呢?举一个例子,如果能够在一个文件集上运行 Mx 就很好了。
我知道可以在 dired 中标记几个文件,然后在它们上运行任何 Emacs 命令(这是真的,还是我与 shell 命令混淆了?),但是定义一次文件集然后能够使用会非常方便它就像一个用于各种文本编辑的文件。
感谢您的任何建议
可以对文件集进行操作的命令在全局自定义变量“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 命令。
Dired 对文件集有几个操作。一个例子是dired-do-search
(绑定到A
),您可以在其中导航多个文件的搜索结果,M-,
就像 with 一样tags-search
。同样,您可以在标记文件中进行查询替换(使用Q
)。
最近在irreal.org上的帖子描述了一些不错的可怕特性。
Dired+有 commanddiredp-fileset
,它在 Emacs 文件集上打开 Dired。系统会提示您输入要使用的文件集。
使用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