6

我是 Emacs 的长期用户,但在 2 年前部分切换到 MacVim,并且一直将它用于我所有的编程工作(仍然使用 Emacs 进行其他工作)。我决定现在切换回 Emacs,主要是因为evil-mode. 我很高兴,但我仍然没有找到像 Vim Command-T插件那样好的和简单的东西。

Emacs 替代品的主要问题是它们要么太复杂要么太慢。

最接近 Command-T 的是helm/ helm-cmd-t,但它并不像它那样工作。

假设您有两条路径:

  • app/controllers/admin/feedback_controller.rb
  • app/controllers/fee_controller.rb

在 Vim 的 Command-T 中,你可以这样写:

app/controllers/fe

它将匹配两条路径。

helm-cmd-t,如果我写app/controllers/fee,它只会匹配fee_controller。如果我想同时匹配两者,我必须使用正则表达式,如 in app/controllers/.*,这还不错但需要更多的击键。

任何建议表示赞赏!

4

8 回答 8

3

任何使用 ido 的 Emacs 包都可以做到这一点,前提是ido-flex-match它不是 nil。Helm-cmd-t故意不支持这种灵活匹配

您可以使用设置为 的 find-file-in-repository 获得您描述的行为ido-flex-match't

于 2013-03-26T12:16:30.027 回答
3

我最近开始使用flxwith ido-modeprojectile它具有非常好的排序模糊匹配,并且感觉与 Vim 的 CtrlP 和 CmdT 非常相似。

它可以通过 MELPA 安装。

M-x package-install
flx

有关详细信息,请参阅flx 项目

这是一个屏幕截图来说明...

flx 模糊匹配

于 2014-05-01T01:22:59.927 回答
2

在这里,但需要先安装 helm:https ://github.com/emacs-helm/helm-cmd-t

编辑:请参阅我的Helm 指南。阅读它为什么强大。请参阅该部分中的实际操作helmprojectile

使用 Vim 中的 Ido + flx 之类的模糊搜索器,您必须按顺序输入 thing 。使用 Helm,您可以执行乱序匹配。我将其称为乱序,因为无论我输入“main.c x86”还是“x86 main.c”,对于任一查询,我都会得到相同的结果集。但将其称为多步搜索也很有意义。无需以有序的方式输入搜索字符串(称为“模式”,实际上是正则表达式),Helm 给了我更大的自由:我可以在脑海中输入我首先想要的东西,而不必记住它的复杂路径;如果我想要的目标中有很多候选人,我会用更多细节(模式)进一步缩小范围。

上面的例子从上面的优点来说明这两种情况:

  • 如果我的愿望目标不是唯一的,那我可以进一步缩小范围。
  • 如果我的愿望目标是独一无二的,我可以立即得到它。

如您所见,Linux 内核源代码树包含超过 40k 个文件,我立即将其缩小到几个文件。

Visual Studio 也在他们的项目搜索中实现了这种机制,但它不像 Helm 那样通用。在 Helm 中,您可以将相同的 Helm 接口重用于许多其他事情;例如,请参阅helm-semantic-or-imenu。你有一个类似于大纲树的东西,但你可以通过一些简单的模式交互式地逐步缩小到你想要的候选者。

最后,仅供参考,flx作者 Le Wang 正在使用 Helm。

于 2014-04-28T04:39:42.477 回答
1

长话短说——没有什么比 Emacs 的 command-T 更好的了。最好的选择是 gpicker 或 Peepcode 的 peepopen,但它们是外部应用程序,我发现它们在使用 command-T 这么长时间后会分散注意力。我现在会坚持使用 MacVim,只是因为 command-T,但可能会考虑实现一些行为类似于 command-T 的东西作为练习。

谢谢大家的回答和评论!

于 2013-03-31T22:23:09.530 回答
1

我曾经遇到过gpicker,它宣称速度是它优于Ido和其他“原生”elisp 包的优势之一。虽然从来没有在现实世界的项目中尝试过,但它可能对你有用。

于 2013-03-26T11:18:27.610 回答
1

你试过LustyExplorer吗?它基于同名的 Vim 插件。

此外,您似乎没有充分利用 Command-T 的功能:acfe应该足以匹配这两个文件。你所做的并不比:e app/con*/**/fe<Tab>.

于 2013-03-26T07:47:22.737 回答
0

试试 textmate.el :) https://github.com/defunkt/textmate.el

你只需要使用“Command+T”而不是“Ctrl+P”:)

于 2015-05-01T19:34:26.030 回答
0

https://github.com/bling/fzf.el

这是我认为最好的解决方案。原因如下:

  1. 如果您在项目中,则使用 projectile 确定项目根目录。
  2. 否则,它会很快索引当前目录中的文件。
  3. 模糊匹配。
  4. 可定制(顶部或底部放置、记录数等)
于 2016-09-29T14:42:24.380 回答