Emacs的Command-T?

时间:2013-03-26 07:10:58

标签: vim emacs elisp macvim

我是很长时间的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。如果我想要同时匹配两者,我必须使用正则表达式,如app/controllers/.*,这不是 错误,但需要更多按键。

任何建议都赞赏!

8 个答案:

答案 0 :(得分:3)

使用ido的任何Emacs包都可以执行此操作,前提是ido-flex-match为非零。 Helm-cmd -t deliberately doesn't support this kind of flexible matching

您可以使用find-file-in-repository设置为ido-flex-match时使用{{3}}获取您描述的行为。

答案 1 :(得分:3)

我最近开始使用flxido-modeprojectile,它具有非常好的排名模糊匹配,并且与Vim的CtrlP和CmdT具有非常相似的感觉。< / p>

可以通过MELPA安装。

M-x package-install
flx

有关详细信息,请参阅flx project

这是一个用来说明......的屏幕抓图。

flx fuzzy matching

答案 2 :(得分:2)

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

编辑:查看我的Helm guide。阅读why it is powerful。请参阅该部分中helmprojectile的操作。

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

以上例子从上述优势来说明两种情况:

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

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

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

最后,fyi,flx作者 - Le Wang--正在使用Helm。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

我曾经遇到gpicker,宣传速度是其优于Ido和其他“原生”elisp套餐的优势之一。从来没有尝试过现实世界的项目,但它可能适合你。

答案 5 :(得分:1)

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

谢谢大家的回答和评论!

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

在我看来,这是最好的解决方案。这就是原因:

  1. 如果您正在项目中,则使用射弹来确定项目根目录。
  2. 否则它会非常快速地索引当前目录中的文件。
  3. 模糊匹配。
  4. 可以自定义(顶部或底部放置,记录数量等)
相关问题