Navigating Phoenix's source code in Vim with ctags

This is my setup:

Mac OS          10.12.1
ViM             8.0.52
Exuberant Ctags 5.8

My .vimrc has: set tags=tags

I’ve created a ~/.ctags file with the following patterns from the Elixir cTags repo on github:

--regex-Elixir=/^[ \t]*def(p?)[ \t]+([a-z_][a-zA-Z0-9_?!]*)/\2/f,functions,functions (def ...)/
--regex-Elixir=/^[ \t]*defcallback[ \t]+([a-z_][a-zA-Z0-9_?!]*)/\1/c,callbacks,callbacks (defcallback ...)/
--regex-Elixir=/^[ \t]*defdelegate[ \t]+([a-z_][a-zA-Z0-9_?!]*)/\1/d,delegates,delegates (defdelegate ...)/
--regex-Elixir=/^[ \t]*defexception[ \t]+([A-Z][a-zA-Z0-9_]*\.)*([A-Z][a-zA-Z0-9_?!]*)/\2/e,exceptions,exceptions (defexception ...)/
--regex-Elixir=/^[ \t]*defimpl[ \t]+([A-Z][a-zA-Z0-9_]*\.)*([A-Z][a-zA-Z0-9_?!]*)/\2/i,implementations,implementations (defimpl ...)/
--regex-Elixir=/^[ \t]*defmacro(p?)[ \t]+([a-z_][a-zA-Z0-9_?!]*)\(/\2/a,macros,macros (defmacro ...)/
--regex-Elixir=/^[ \t]*defmacro(p?)[ \t]+([a-zA-Z0-9_?!]+)?[ \t]+([^ \tA-Za-z0-9_]+)[ \t]*[a-zA-Z0-9_!?!]/\3/o,operators,operators (e.g. "defmacro a <<< b")/
--regex-Elixir=/^[ \t]*defmodule[ \t]+([A-Z][a-zA-Z0-9_]*\.)*([A-Z][a-zA-Z0-9_?!]*)/\2/m,modules,modules (defmodule ...)/
--regex-Elixir=/^[ \t]*defprotocol[ \t]+([A-Z][a-zA-Z0-9_]*\.)*([A-Z][a-zA-Z0-9_?!]*)/\2/p,protocols,protocols (defprotocol...)/
--regex-Elixir=/^[ \t]*Record\.defrecord[ \t]+:([a-zA-Z0-9_]+)/\1/r,records,records (defrecord...)/
--regex-Elixir=/^[ \t]*test[ \t]+\"([a-z_][a-zA-Z0-9_?! ]*)\"*/\1/t,tests,tests (test ...)/

The ctags navigation within my own project files work just fine. But whenever I try to see the source code for the Phoenix Framework itself (or its dependencies) I get a

E426: tag not found: Mix

(Mix is just one example)

How do I fix this and navigate Phoenix’s source code?

Why not use alchemist? It is a vim completer (and more) for Elixir that actually parses the language to be able to get the information better than ctags regex matching could. :slight_smile:

Hrmm, I think I’d need more logs for that. I’ve not tried ctags with elixir.


Nevermind ctags… I’m having the same issue using alchemist :icon_sad:

It uses the same shortcut ^] that is ( ctrl + ] )

Can you cat that file at that exact displayed path from the same environment as vim is running in?

1 Like

Nailed it.

That used to be the project’s path.

Thank you for noticing that but I also have no idea how to update that reference.

1 Like

Unsure about that, nothing in elixir or phoenix that alchemist or ctags would rely on seem to hardcode absolute directory paths that I’ve seen… o.O

What is your system?

I’m not sure what you mean, have you seen my system’s info on the original question?

Is it something other than that?

Just updated the question to the current issue :wink:

Ah, mac, might need someone else then, I know its file system does some funky weird stuff. ^.^


Just confirmed it was a problem with my setup.

Ran mix deps.get and npm install again, everything is working.