Emacs文件集:如何运行其他(elisp而非shell)命令?

3
有5个Elisp命令可以在Emacs文件集上运行,还可以运行任何shell命令。那么其他所有的Emacs命令呢?举个例子,能够在文件集上运行M-x occur就很不错。
我知道可以在dired中标记多个文件,然后在它们上面运行任何Emacs命令(是这样吗,还是我弄混了shell命令?),但是定义一个文件集然后像一个单一文件一样用于各种文本编辑会非常方便。
感谢任何建议。
4个回答

2

可以对文件集进行操作的命令在全局自定义变量“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)))

这些值由名称、函数和参数列表(或返回一个参数列表的函数)的关联列表组成,用于对文件集中的文件运行。因此,如果您想添加一个在文件集上执行“occur”命令的命令,可以使用“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命令也是如此。

1
Dired有几个文件集操作。一个例子是dired-do-search(绑定到A),您可以使用M-,在几个文件的搜索结果中导航,就像使用tags-search一样。类似地,您可以在标记文件中进行查询替换(使用Q)。 irreal.org上的最近帖子描述了一些不错的Dired功能。

不错的链接 - 确实是非常有趣的博客。感谢您提供的Dired技巧,有很多东西需要学习(和记住..) - Thorsten

0

使用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


1
Emacs的世界似乎就像真实的宇宙一样——没有限制。感谢,这是惊人的东西。 - Thorsten

0

Dired+有一个名为diredp-fileset的命令,它可以在Emacs文件集上打开Dired。您将被提示选择要使用的文件集。


我已经安装了Dired+,但是M-x diredp-fileset命令会提示“未提供文件集功能”。 - Thorsten
这意味着库filesets.el不在您的load-path中。命令diredp-fileset需要该库--命令执行的第一件事就是尝试加载该库。如果找不到它,则会引发您看到的错误。Emacs 22及更高版本附带了filesets.el。否则,您可能可以在Google上搜索它,但您可能需要找出它是否与您的Emacs版本兼容。另请参阅filesets+.el,它修复了filesets.el中的一些限制。 - Drew
@Drew 这也可能意味着 filesets-datanil。如果是这种情况,最好有一个不同的诊断消息。最好的问候,Tobias - Tobias
@Tobias:好主意-完成。请尝试最新的dired+.el - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接