Vim Tips Wiki
(Remove html character entities)
(filetype.vim normalization)
Line 10: Line 10:
 
|rating=19/7
 
|rating=19/7
 
|category1=LanguageSpecific
 
|category1=LanguageSpecific
|category2=
+
|category2=Filetype
 
}}
 
}}
 
Inform is an Interactive Fiction authoring language. Its 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.
 
Inform is an Interactive Fiction authoring language. Its 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':
+
The solution is to use a custom [[filetype.vim]] and 'scripts.vim'.
  +
  +
In filetype.vim add:
 
<pre>
 
<pre>
 
au BufNewFile,BufRead *.h call FTCheck_inform()
if exists("did_load_filetypes")
 
  +
</pre>
finish
 
endif
 
augroup filetypedetect
 
au BufNewFile,BufRead *.h call FTCheck_inform()
 
augroup END
 
   
  +
and after <code>augroup END</code> add
  +
<pre>
 
" function to detect inform code (any extension)
 
" function to detect inform code (any extension)
 
fun! FTCheck_inform()
 
fun! FTCheck_inform()
Line 41: Line 41:
 
</pre>
 
</pre>
   
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.
+
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':
 
For files with no extension, create a '$HOME/.vim/scripts.vim':

Revision as of 08:07, 30 September 2008

Tip 410 Printable Monobook Previous Next

created January 22, 2003 · complexity intermediate · author Stephen Thomas, Ross Presser, Neil Cerruti · version 6.0


Inform is an Interactive Fiction authoring language. Its 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'.

In filetype.vim add:

au BufNewFile,BufRead *.h call FTCheck_inform()

and after augroup END add

" 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

Comments