If you keep Emacs open all the time you end up accumulating lots of buffers. That can make navigating a little bit awkward.

Projectile is a really nice package that makes navigating in and between projects much easier. I also have counsel-projectile installed.

Here's my configuration:

;; projectile (use-package projectile :ensure t :config (projectile-global-mode) (setq projectile-completion-system 'ivy )) (use-package counsel-projectile :ensure t :config (counsel-projectile-on))

Projectile considers a sub-directory tree to be a project if it's a git or other source control repo, if it's created by tool like lein, maven, or sbt, or if you put an empty file named .projectile in the root directory of the project.

Projectile learns about projects when you open a file in that project and then stores that information in an Emacs bookmark file in your .emacs.d directory.

You can switch between projects using C-c p and when in a project, load another file using C-c f . If you use the which-key package as I do, just type C-c - the projectile prefix and then which-key will bring up help.

The video goes through some of my favorite features and you can find the full documentation can be found here.

The other package I show is dumb-jump. It's basically a zero (or almost zero) configuration tags replacement. Really nice.

Here's my current config:

(use-package dumb-jump :bind (( "M-g o" . dumb-jump-go-other-window) ( "M-g j" . dumb-jump-go) ( "M-g x" . dumb-jump-go-prefer-external) ( "M-g z" . dumb-jump-go-prefer-external-other-window)) :config (setq dumb-jump-selector 'ivy ) ;; (setq dumb-jump-selector 'helm) :ensure) :config ;; (setq dumb-jump-selector 'ivy) ;; (setq dumb-jump-selector 'helm) :init (dumb-jump-mode) :ensure )

Enjoy.

Relevant links: