There are a lot of features available in Vim! Just bring up your vim and do a :version; you'll probably see quite a few. How do these features get selected? Well, some options are (de-)selected based on the type of operating system you have, and some are (de-)selected based on whether or not you want a gui (ie. gvim). You may choose which options using the config script:
example: configure --enable-cscope --with-features=huge
The --with-features selector can take several words (tiny, small, normal, big, or huge). This feature selector's effect is shown in the table below. With a bit more effort you could tailor some features in or out by modifying <auto/config.h> by hand, although some features do need others to work right.
| +/- Version | Configure Option | T | S | N | B | H | Only on |
| ARP | Amiga | ||||||
| X11 | --with-x | * | * | * | MAG* | ||
| autocmd | * | * | * | ||||
| balloon_eval | Athena Motif | ||||||
| browse | * | * | * | ||||
| builtin_terms | |||||||
| byte_offset | * | * | * | ||||
| cindent | * | * | * | ||||
| cmdline_compl | * | * | * | ||||
| cmdline_hist | * | * | * | * | |||
| cmdline_info | * | * | * | ||||
| comments | * | * | * | ||||
| cryptv | * | * | * | ||||
| cscope | --enable-cscope | * | * | Unix | |||
| dialog_con_gui | * | * | * | ||||
| diff | * | * | * | ||||
| digraphs | * | * | * | ||||
| ebcdic | |||||||
| emacs_tags | * | * | |||||
| eval | * | * | * | ||||
| ex_extra | * | * | * | ||||
| extra_search | * | * | * | ||||
| farsi | * | * | |||||
| file_in_path | * | * | * | ||||
| find_in_path | * | * | * | ||||
| folding | * | * | * | ||||
| footer | Motif | ||||||
| fork() | Unix | ||||||
| gettext | * | * | * | L* | |||
| hangul_input | --enable-hangulinput | ||||||
| insert_expand | * | * | * | ||||
| jumplist | * | * | * | * | |||
| keymap | * | * | |||||
| langmap | * | * | |||||
| libcall | Win32,Unix,VMS | ||||||
| linebreak | * | * | * | ||||
| lispindent | * | * | * | ||||
| listcmds | * | * | * | * | |||
| localmap | * | * | * | ||||
| menu | * | * | * | ||||
| mksession | * | * | * | ||||
| modify_fname | * | * | * | ||||
| mouse | * | * | * | ||||
| mouse_dec | * | * | |||||
| mouse_gpm | --disable-gpm | * | * | * | |||
| mouse_jsbterm | Jsbterm mouse | ||||||
| mouse_netterm | * | * | |||||
| mouse_xterm | * | * | * | Unix | |||
| mouseshape | * | * | * | ||||
| multi_byte | --enable-multibyte | * | * | ||||
| multi_lang | * | * | * | ||||
| osfiletype | |||||||
| path_extra | * | * | * | ||||
| perl | --enable-perlinterp | ||||||
| printer | * | ||||||
| python | --enable-pythoninterp | ||||||
| quickfix | * | * | * | ||||
| rightleft | * | * | |||||
| ruby | --enable-rubyinterp | ||||||
| scrollbind | * | * | * | ||||
| signs | * | * | or SunWorkshop | ||||
| smartindent | * | * | * | ||||
| sniff | --enable-sniff | ||||||
| statusline | * | * | * | ||||
| sun_workshop | --enable-workshop | ||||||
| syntax | * | * | * | ||||
| system | Unix&!Gui | ||||||
| tag_any_white | |||||||
| tag_binary | * | * | * | ||||
| tag_old_static | * | * | * | ||||
| terminfo | * | * | * | * | * | (if needed) | |
| termresponse | * | * | * | ||||
| textobjects | * | * | * | ||||
| tgetent | * | * | * | * | * | (if needed) | |
| title | * | * | * | not MSDOS | |||
| toolbar | * | * | * | Gui only | |||
| user_commands | * | * | * | ||||
| vertsplit | * | * | * | * | |||
| viminfo | * | * | * | ||||
| virtualedit | * | * | * | ||||
| visual | * | * | * | * | |||
| visualextra | * | * | * | ||||
| wildignore | * | * | * | ||||
| wildmenu | * | * | * | ||||
| windows | * | * | * | * | |||
| writebackup | * | * | * | * | * | not VMS | |
| xfontset | --enable-fontset | ||||||
| xim | --enable-xim | ||||||
| xterm_clipboard | * | * | * | * | * | Unix & Gui | |
| xterm_save |
| L* | = | needs <locale.h> or X_LOCALE |
| MAG* | = | needs Motif, Athena, or GTK |