Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I know how to check if a feature has been compiled IN:

:echo has("syntax")

How do I get a list of all possible compile-time features?

Example (pseudo-code):

foreach "feature" in "feature-list":
    print "has(feature)"

Objective: build a vim plug-in for self use that detects some features and "switches" on some conditions.

share|improve this question

2 Answers 2

This is a list of possible features in my version of Vim (7.3.315):

["all_builtin_terms", "amiga", "arabic", "arp", "autocmd", "balloon_eval", "balloon_multiline", "beos", "browse", "builtin_terms", "byte_offset", "cindent", "clientserver", "clipboard", "cmdline_compl", "cmdline_hist", "cmdline_info", "comments", "compatible", "cryptv", "cscope", "debug", "dialog_con", "dialog_gui", "diff", "digraphs", "dnd", "dos16", "dos32", "ebcdic", "emacs_tags", "eval", "ex_extra", "extra_search", "farsi", "file_in_path", "filterpipe", "find_in_path", "float", "fname_case", "folding", "footer", "fork", "fullscreen", "gettext", "gui", "gui_athena", "gui_gnome", "gui_gtk", "gui_gtk2", "gui_mac", "gui_macvim", "gui_motif", "gui_photon", "gui_running", "gui_win32", "gui_win32s", "hangul_input", "iconv", "insert_expand", "jumplist", "keymap", "langmap", "libcall", "linebreak", "lispindent", "listcmds", "localmap", "lua", "mac", "macunix", "menu", "mksession", "modify_fname", "mouse", "mouse_dec", "mouse_gpm", "mouse_netterm", "mouse_pterm", "mouse_sysmouse", "mouse_xterm", "mouseshape", "multi_byte", "multi_byte_encoding", "multi_byte_ime", "multi_lang", "mzscheme", "netbeans_enabled", "netbeans_intg", "odbeditor", "ole", "os2", "path_extra", "perl", "persistent_undo", "postscript", "printer", "profile", "python", "python3", "qnx", "quickfix", "reltime", "rightleft", "ruby", "scrollbind", "showcmd", "signs", "smartindent", "sniff", "spell", "startuptime", "statusline", "sun_workshop", "syntax", "syntax_items", "system", "tag_binary", "tag_old_static", "tag_any_white", "tcl", "terminfo", "termresponse", "textobjects", "tgetent", "title", "toolbar", "transparency", "unix", "user_commands", "vertsplit", "vim_starting", "viminfo", "virtualedit", "visual", "visualextra", "vms", "vreplace", "wildignore", "wildmenu", "win16", "win32", "win32unix", "win64", "win95", "winaltkeys", "windows", "writebackup", "xfontset", "xim", "xsmp", "xsmp_interact", "xterm_clipboard", "xterm_save", "x11"]

It took like 30 second to compile it from :h feature-list.

share|improve this answer
    
Thanks! :) Do you think the app should expose this in the form of a dictionary? Keys = features, Values = 1/0 (maybe?). I was looking for programmatic access.. as you have with "has(feature)" –  Robottinosino Feb 1 '13 at 14:05
    
I'm not exactly sure I understand what you want to do. I'd go with a dictionary, yes, and loop through it –  romainl Feb 1 '13 at 14:26
    
What I wanted to do was to discover whether Vim natively exposed this information so that I could query it without having to "parse" the help page for feature-list... like I can do for individual features (e.g. has("syntax") to see if the binary was compiled with syntax capabilities) –  Robottinosino Feb 1 '13 at 14:35
    
And the answer is still "no". Vim doesn't seem to expose that so you must come up with your own list and compare feature by feature. –  romainl Feb 1 '13 at 15:30

Objective: build a vim plug-in for self use that detects some features and "switches" on some conditions.

If you "switch" on some features, you still need to know them beforehand. What's so bad about hard-coding their names directly into the plugin?!

Vim has limited capabilities for self-reflection. You could parse the output of :version (which includes a feature list). I've also seen a plugin parse a particular help page (e.g. $VIMRUNTIME/doc/options.txt) to obtain a list of settings, but I would recommend none of them if you don't need them.

share|improve this answer
    
That's right. :version is what I am "reflecting" on at the moment, but it's a hack.. ideally one would get a dictionary where keys are 'browse', 'wildmenu', 'X11', etc.. and values are 0 || 1 ! –  Robottinosino Feb 1 '13 at 11:16
    
Do you have a valid use case? Why doesn't hard-coding suit you? –  Ingo Karkat Feb 1 '13 at 11:21

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.