Sebastian
Sebastian

Reputation: 1428

What can I do if vim still chooses the wrong syntax highlighter?

I'm on a system (linux) that always recognizes cpp files (*.cc) as tcl files. I don't know what file type that is, but I wanted to override it. The correct syntax highlighting is chosen if I manually do :set ft=cpp. However, I'm having troubles setting that automatically and I don't want to use the modeline option. My own .vimrc doesn't interfere (same result if I rename it).

From the vim help (:help ftplugin-override)

                                                        *ftplugin-overrule*
If a global filetype plugin does not do exactly what you want, there are three
ways to change this:

1. Add a few settings.
   You must create a new filetype plugin in a directory early in
   'runtimepath'.  For Unix, for example you could use this file: 
        vim ~/.vim/ftplugin/fortran.vim
  You can set those settings and mappings that you would like to add.  Note
   that the global plugin will be loaded after this, it may overrule the 
   settings that you do here.  If this is the case, you need to use one of the 
   following two methods.

I have used this option before on another machine and that worked. I've tried

<file> .vim/ftplugin/tcl.vim
set filetype=cpp
"au BufRead,BufNewFile *     set filetype=cpp

The first line correctly sets the filetype (:set ft? returns cpp), but syntax highlighting is not the same as if I said :set ft=cpp. It's still the tcl syntax highlighting. The second line does nothing.

2. Make a copy of the plugin and change it. 
   You must put the copy in a directory early in 'runtimepath'.  For Unix, for 
   example, you could do this: 
        cp $VIMRUNTIME/ftplugin/fortran.vim ~/.vim/ftplugin/fortran.vim
  Then you can edit the copied file to your liking.  Since the b:did_ftplugin
   variable will be set, the global plugin will not be loaded.
   A disadvantage of this method is that when the distributed plugin gets
   improved, you will have to copy and modify it again.

There seems to be no file in my $VIMRUNTIME directory /usr/share/vim/vim72/ftplugin/ called tcl.vim.

3. Overrule the settings after loading the global plugin.
   You must create a new filetype plugin in a directory from the end of
   'runtimepath'.  For Unix, for example, you could use this file: 
        vim ~/.vim/after/ftplugin/fortran.vim
  In this file you can change just those settings that you want to change.

Has the same effect as 1. Is there anything else I can try? Thanks a lot in advance.

Upvotes: 1

Views: 1434

Answers (1)

romainl
romainl

Reputation: 196476

cpp is the default filetype for *.cc and *.cpp files.

The tcl filetype is only set for *.tcl, *.tk, *.itcl, *.itk and *.jacl.

I see no reason why Vim would default to tcl when loading a *.cc file but you could check if theses files are installed:

/usr/share/vim/vim7x/ftplugin/cpp.vim
/usr/share/vim/vim7x/indent/cpp.vim
/usr/share/vim/vim7x/syntax/cpp.vim

and if the correct checks are done in:

/usr/shhare/vim/vim7x/filetype.vim

Are you the only person working on this machine? Do you use modelines?

Upvotes: 3

Related Questions