It is useful, especially for new developers, to be able to easily
navigate through NECI code. A simple solution for Vim users is to
generate a tags file containing the names of all functions and global
variables and their locations. Vim automatically reads this file from
the current directory, if it exists, and use it to facilitate code
navigation. Then you can jump to the deceleration of a variable or a
function by putting the cursor over it and pressing Ctrl+] . To go
back, press Ctrl+t. Other tag-related commands are explained here:
https://vim.fandom.com/wiki/Browsing_programs_with_tags.
To generate the tags file, a program called ctags is needed. It is
installed by default in many Linux distributions, but this version is
most probably the one called ctags (GNU Emacs) and does not support
the options we need. The required version is Exuberant Ctags or its
derivative Universal Ctags which you can be downloaded from here:
https://github.com/universal-ctags/ctags.
Once you installed the correct version and made sure it is the default
one, [^ctags] go to the source directory of NECI and run the script
gen_vim_tags.sh which is available in the tools directory
cd neci/src
../tools/gen_vim_tags.sh
This script does some tricks using the preprocessor to solve issues with
handling macros in NECI files. Without these, ctags would miss many
variables due to parsing issues. The script generates the necessary
tags file in the current directory and code navigation should become
available for all source files in this directory.
tags is simply a text file with the symbol’s name, the file where its
defined, and the line number . There is no automatic magic happening
behind the scenes as one would expect from a full-fledged IDE.
Therefore, whenever the code changes, you need to explicitly
re-generate the tags file. Otherwise, Vim will simply jump to the old
positions of the symbols.
Another useful tool is Tagbar plugin for Vim which lists all
functions/variables in the current file in a side window. Using this
plugin does not require the tags file, because it generates its own
tags on-the-fly. However, you will need to install an updated version of
ctags executable. All necessary details are explained on the plugin’s
homepage: https://github.com/majutsushi/tagbar
Like Vim, Emacs accepts TAGS file (notice the capital letters). This
file can similarly be generated using gen_emacs_tags.sh, then you can
use Meta+. to jump to definition and Meta+* to go back. Other
tag-related commands are explained here:
https://www.emacswiki.org/emacs/EmacsTags.