emacsprojectile

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


I have installed Projectile on my emacs26 installation. My configuration looks like as below:

(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

I installed Projectile using Melpa.

I would like Projectile to find files in a project similar to how the command C-p works in vscode. Given the following directory:

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

In vscode if I do C-p dogs (no <RET>), I would see a selectable list containing dogs.html and dogs.js. As far as I can tell, this is duplicated by Projectile's C-c p f. The problem is when I do a search like models/dogs. In vscode, this would return only dogs.js, in Projectile, it returns nothing (reasonable, but not what I want).

I have large collections/model directories with many subdirectories and so I'm hoping to emulate this vscode behavior in Emacs if possible.

How can I have Projectile (or another Emacs plugin) file-search similarly to how vscode's C-p file-searches when dealing with multi-nested directories?

I investigated projectile-fix, but it does not seem to do as I want, and is also apparently incompatible with Helm, which I am starting to use and like.


Solution

  • By default, Projectile uses Ido for completion. (Check the value of the variable projectile-completion-system to see if this has been configured differently in your Emacs.)

    In Ido, you can type a part of the file name, and then hit C-SPC to restrict the list of items to what you've currently typed. So in your example you would type models C-SPC dogs to get to dogs.js.

    If you have configured Projectile to use Helm, you can use a space character between the portions of the match: typing models dogs should narrow the list of matches down to dogs.js.