如何使Emacs Projectile像VScode的“ C-p”一样运行?

时间:2019-01-04 17:48:43

标签: emacs projectile

我已经在我的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中,这仅返回dogs.js,在Projectile中,不返回任何内容(合理,但不是我想要的)。

我有许多子目录的大型collections / model目录,因此我希望在可能的情况下在Emacs中模拟此vscode行为。

在处理多目录目录时,如何像对vscode的C-p文件搜索一样进行Projectile(或其他Emacs插件)文件搜索?

我研究了projectile-fix,但是它似乎并没有达到我的期望,并且显然与我开始使用并喜欢的Helm不兼容。

2 个答案:

答案 0 :(得分:1)

默认情况下,Projectile使用Ido完成。 (检查变量new CacheResponse<T>((T)Convert.ChangeType(value, typeof(T)); 的值,以查看其在Emacs中的配置是否不同。)

在Ido中,您可以键入文件名的一部分,然后按projectile-completion-system将项目列表限制为当前键入的内容。因此,在您的示例中,您将输入C-SPC进入models C-SPC dogs

如果已将Projectile配置为使用Helm,则可以在比赛的各个部分之间使用空格字符:键入dogs.js会将比赛列表缩小到models dogs

答案 1 :(得分:0)

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

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