1

icicles问题的简短版本:即使只给出文件名的部分匹配,我如何才能有效地搜索目录和子目录中的文件?

编辑:简短的回答是icicle-locate-file在目录的顶层使用并使用 S-Tab (shift-tab) 开始完成而不是普通选项卡。此答案中的更多详细信息。

作为附录,我icicles在此之后放弃了,因为每次使用icicle-locate-file. 可能有办法解决这种延迟,也许是通过创建和“收集”的文件集icicles,但我开始觉得潜在的好处正在被解决这个问题的前期成本和保持文件的成本所侵蚀。文件集更新。正如作者在icicles下面指出的,访问 *nix 的locate命令将允许我使用icicle-locate,这比icicle-locate-file. 但是,我在 Windows 上运行,并且 Everything 实用程序对我不起作用。所以,回到大量使用 IDO 和扩展到dired缓冲区的书签。

==========

更长的版本... 由于 Emacs (24.3.1) 现在是我的主要开发环境,我一直在探索提高效率的方法,特别是在文件名完成方面有一段时间了。对这个问题的几个很好的答案将我指向ido-modeand dired-x,这两个我现在都在使用。

另一个很棒的推荐是 Emacs 的书签。特别是,将dired缓冲区定义为书签并使用C-x r b mybook1甚至C-x r bC-x C-fminibuffer 调用(此页面很有帮助)跳转到它们是两个非常有用的策略。

有几个人提到anything了它的继任者helm。我一直无法获得在 Windows 7 上运行的任何一个包的文件位置部分。显然它们依赖于Everything的命令行版本,但这对我来说失败了,正如这个问题中所详述的那样,对此有一些有用的回应,但没有确定的答案。似乎它在 *nix 上运行顺利,但helm-locate在 Windows 上没有太多关于 etc 的讨论。所以这算在内helmanything用于文件名完成。

这让我想到了冰柱。在一个关于在子目录中进行查找文件搜索的问题中,提问者评论说他们已经查看了“ido 和 icicles,但它们似乎只在当前目录中工作很浅”。

作为对此的回应,出现了关于 icicles 的评论:“如果需要,您可以搜索系统上的任何文件,匹配文件名和路径的任何部分”,并带有指向Icicles 文件名输入页面的指针。虽然我很欣赏 icicles 帮助页面所付出的巨大努力,但我并没有发现这个很有用,因为它主要包含 icicles 功能的描述列表。对我有用的是一个指导您查找文件的教程。

让我们假设以下内容。

  • 我正在运行 Emacs 24.3.1 的 Windows 7 安装。
  • 我有一个包含一些文件和文件夹的顶级目录。在这种情况下,它是c:/iciclestest/
  • 我知道在树的这一部分某处有一个文件,其中有“grob”作为文件名的一部分。
  • 我想用 icicles 来找到这个文件。我已将(require 'icicles)and(icy-mode 1)放入我的 init 文件中。

所以,我们走吧。在暂存缓冲区中启动 Emacs。点击 Cx Cf。我收到一个File or directory提示,左侧有一个紫色加号,我认为这表明这是 icicles 的multi-commands之一。
冰

点击选项卡让我得到这个迷你框架,向我展示当前目录的内容。
冰

我点击folder1子目录上的选项卡,冰柱向我显示了其中的内容,正如人们所期望的那样。 冰

您可以看到几个名称中带有“grob”的文件。
对,Cg 清除所有内容,然后再次 Cx Cf。输入“格罗布”。我收到“无前缀完成”消息。这让我有点惊讶,因为我预计 icicles 会像 ido-mode 那样具有某种奇妙的模糊匹配。 冰

好吧,也许我需要一个不同的命令。Let's try M-x icicle-locate-file,它给了我这个提示: 冰

如果我输入“grob”并点击确认,我只会得到一个新文件,如下所示。 冰

回顾一下:我想做的是输入一个字符串,然后让冰柱去寻找包含该字符串的文件或文件夹。我的主开发文件夹有很多目录和数千个文件,所以在 Emacs 中快速查找将是天赐之物。

我意识到该locate命令在 Windows 上不存在,因此功能在某些方面会受到限制,但我认为基于用户输入的字符串从当前目录递归搜索文件和子​​目录会很简单。我错过了什么?我会以正确的方式解决这个问题吗?这可以在冰柱中完成吗?

4

2 回答 2

1
  1. 您需要多阅读 Icicles 文档:使用S-TAB而不是TABfor apropos(正则表达式或子字符串)完成。这显然就是你想要的:匹配grob为子字符串。(不需要任何模糊匹配。)

  2. 由于您希望文件匹配grob该目录下的任何位置,请使用icicle-locate-file. 给它那个目录作为起点。(并且由于您想匹配grob文件名中的任何位置,请使用S-TAB完成。)

  3. Icicles 确实提供了“像 ido-mode 一样的快速模糊匹配”(实际上是很多whizzier)。Ido 的“flex”匹配与 Icicles 的“scatter”匹配相同。

  4. 您可以将您想要的完成类型设置为模糊匹配类型之一。在 minibuffer 中,C-(在前缀完成方法之间循环。 M-(在 apropos-completion 方法之间循环。真正的模糊匹配是一种前缀补全方法。Flex/scatter 匹配是穷人的模糊匹配,是一种恰当的补全方法(所以使用M-(循环到它)。要更改默认匹配,因此您无需循环获取您喜欢的匹配,自定义选项icicle-S-TAB-completion-methods-alisticicle-TAB-completion-methods.

于 2013-09-21T17:09:45.600 回答
0

除了关于 的答案之外,如果您同时使用 Icicles 和 Dired+ ,您可以使用 (command )递归找到标记的Diredicicle-locate-file子目录及其标记的子目录等中文件。M-+ C-Ficicle-visit-marked-file-of-content-recursive

该答案提供了详细信息。

于 2013-11-13T16:55:56.790 回答