Using your .vimrc file on many machines with different versions and feature
sets for Vim is generally not too much of a problem if you apply a little care
in making a gracefully degrading .vimrc. In most cases, using the output
of vim --version and checking the help files will tell you what features to
check in order to determine which parts of your .vimrc configuration to load,
and which to ignore.
There’s one particular feature that’s less obvious, though, and that’s eval.
Vim’s help describes it like this in :help +eval:
N  *+eval*      expression evaluation |eval.txt|
The eval.txt document, in turn, describes the syntax for various features
fundamental to Vimscript, including variables, functions, lists, and
dictionaries.
All this makes eval perhaps the most central feature of Vim. Without it, Vim
doesn’t have much of its programmable nature, and remains not much more than
classic vi. If your particular build of Vim doesn’t include it, then
Vimscript essentially does not work as a programming language, and elementary
calls like function and let will throw errors:
E319: Sorry, the command is not available in this version: function
E319: Sorry, the command is not available in this version: let
If you’re getting this kind of error, you’re probably using a very
stripped-down version of Vim that doesn’t include eval. If you just want to
prevent the error by ignoring a block of code if the feature is unavailable,
you can do this with has():
if has("eval")
    ...
endif
Vim will still be perfectly functional as a vi-style editor without +eval,
but if you’re going to need any Vimscript at all, you should recompile Vim with
a --with-features value for the ./configure line that does include it, such
as normal, big, or huge, or install a more fully-featured packaged
version. For example, on Debian-like systems, the vim-tiny package that is
included in the netinst system does not include eval, but the vim and
vim-runtime packages do.
Inspecting Vim’s source, in particular the ex_docmd.c file, gives some
indication of how fundamental this feature is, applying the C function ex_ni
which simply prints the “not available” error shown above to a large number of
control structures and statements if the FEAT_EVAL constant is not defined:
#ifndef FEAT_EVAL
# define ex_scriptnames     ex_ni
# define ex_finish      ex_ni
# define ex_echo        ex_ni
# define ex_echohl      ex_ni
# define ex_execute     ex_ni
# define ex_call        ex_ni
# define ex_if          ex_ni
# define ex_endif       ex_ni
# define ex_else        ex_ni
# define ex_while       ex_ni
# define ex_continue        ex_ni
# define ex_break       ex_ni
# define ex_endwhile        ex_ni
# define ex_throw       ex_ni
# define ex_try         ex_ni
# define ex_catch       ex_ni
# define ex_finally     ex_ni
# define ex_endtry      ex_ni
# define ex_endfunction     ex_ni
# define ex_let         ex_ni
# define ex_unlet       ex_ni
# define ex_lockvar     ex_ni
# define ex_unlockvar       ex_ni
# define ex_function        ex_ni
# define ex_delfunction     ex_ni
# define ex_return      ex_ni
# define ex_oldfiles        ex_ni
#endif
