sponsor Vim development Vim logo Vim Book Ad

intermediate Tip #410: Allow Inform header files to be distinguished from C headers

 tip karma   Rating 15/6, Viewed by 1031 

created:   January 22, 2003 2:55      complexity:   intermediate
author:   Stephen Thomas, Ross Presser, Neil Cerruti      as of Vim:   6.0

Inform is an Interactive Fiction authoring language.  It's header files often use a '.h' extension, which causes VIM to think they are
C files, or do not have any extension at all, leaving VIM unable to determine what kind of file they are.  This is irritating to Inform
developers using VIM with syntax highlighting.

The solution is to use a custom 'filetype.vim' and 'scripts.vim'.  Create a '$HOME/.vim/filetype.vim':

    if exists("did_load_filetypes")
      finish
    endif
    augroup filetypedetect
      au BufNewFile,BufRead *.h             call FTCheck_inform()
    augroup END

    " function to detect inform code (any extension)
    fun! FTCheck_inform()
        if getline(1) =~ "^!"
           setfiletype inform
        elseif getline(2) =~ "^!"
           setfiletype inform
        else
            let s:colnum = col('.')
            let s:linenum = line('.')
            call cursor(500, 1)
            if search('\[\(\s*\I\i*\)*\s*;', 'bW') > 0
                setfiletype inform
            endif
            call cursor(s:linenum, s:colnum)
        endif
    endfun

On loading a file with a '.h' extension, a function is called to examine the file for certain Inform-specific constructs.  If it finds any, it sets the filetype as inform, otherwise it leaves the filetype unset, allowing the global 'filetype.vim' to determine the filetype.

For files with no extension, create a '$HOME/.vim/scripts.vim':

   " local scripts.vim gets called when
   " all autocommands have failed to identify file type,
   " but before global scripts.vim
   "
   call FTCheck_inform()

See also the site http://www.stephenthomas.uklinux.net/informvim

 rate this tip  Life Changing Helpful Unfulfilling 

<<Using selected text as part of a command? | How to initialize plugins >>

Additional Notes

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to [email protected] after searching the archive. Help Bram help Uganda.
Sponsored by Web Concept Group Inc. SourceForge Logo