如何让 Emacs Projectile 像 VScode 的 "C-p" 一样运行?

How can I get Emacs Projectile to operate like VScode's "C-p" ?

我已经在我的 emacs26 安装上安装了 Projectile。我的配置如下所示:

(projectile-mode +1)
(define-key projectile-mode-map (kbd "s-p") 'projectile-command-map)
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
(projectile-global-mode) ;; to enable in all buffers
(setq projectile-enable-caching t) ;; to prevent constantly reindexing projectsx

我使用 Melpa 安装了 Projectile。

我希望 Projectile 在项目中查找文件,类似于命令 C-p 在 vscode 中的工作方式。给定以下目录:

src/
  views/
    cars.html
    dogs.html
  models/
    animals/
      dogs.js
      cats.js
    vehicles/
      cars.js
      trucks.js

在 vscode 中,如果我执行 C-p dogs(没有 <RET>),我会看到一个包含 dogs.htmldogs.js 的可选列表。据我所知,这与 Projectile 的 C-c p f 相同。问题是当我进行 models/dogs 之类的搜索时。在 vscode 中,这只会 return dogs.js,在 Projectile 中,它 return 什么都没有(合理,但不是我想要的)。

我有一个很大的 collections/model 目录和许多子目录,所以我希望尽可能在 Emacs 中模拟这种 vscode 行为。

在处理多嵌套目录时,如何让 Projectile(或另一个 Emacs 插件)文件搜索类似于 vscode 的 C-p 文件搜索?

我调查了projectile-fix,但它似乎并不如我所愿,而且显然与我开始使用并喜欢的 Helm 不兼容。

您可以使用 helmivy 及其相应的射弹插件 helm-projectilecounsel-projectile.

但这意味着您将不得不大大改变您使用 emacs 的方式(至少在短期内)。无论如何,这将帮助您在未来提高工作效率,因此这是一笔不错的投资。

默认情况下,Projectile 使用 Ido 完成。 (检查变量 projectile-completion-system 的值,看看在您的 Emacs 中是否有不同的配置。)

在 Ido 中,您可以键入文件名的一部分,然后点击 C-SPC 将项目列表限制为您当前键入的内容。因此,在您的示例中,您将键入 models C-SPC dogs 以到达 dogs.js.

如果您已将 Projectile 配置为使用 Helm,则可以在匹配部分之间使用 space 字符:键入 models dogs 会将匹配列表缩小到 dogs.js .