" Override system filetype.vim if exists('g:did_load_filetypes') finish endif let g:did_load_filetypes = 1 " If we don't have +autocmd or are 'compatible', do nothing, and don't try " again later if !has('autocmd') || &compatible finish endif " Helper function to run the 'filetypedetect' group on a file with its " extension stripped off function! s:StripRepeat() " Check we have the fnameescape() function if !exists('*fnameescape') return endif " Expand the match result let l:fn = expand('') " Strip leading and trailing #hashes# if l:fn =~# '\m^#\+.*#\+$' let l:fn = substitute(l:fn, '\m^#\+\(.\+\)#\+$', '\1', '') " Strip trailing tilde~ elseif l:fn =~# '\m\~$' let l:fn = substitute(l:fn, '\~$', '', '') " Strip generic .extension else let l:fn = expand(':r') endif " Re-run the group if there's anything left if strlen(l:fn) execute 'doautocmd filetypedetect BufRead ' . fnameescape(l:fn) endif endfunction " Use our own filetype detection rules augroup filetypedetect autocmd! " Unwrap hashes, tildes, generic extensions, and Debian packaging working " extensions (if we can do so safely), and repeat the filetype detection to " see if there's a match beneath them autocmd BufNewFile,BufRead \ #?*# \,?*~ \,?*.{bak,example,in,new,old,orig,sample,test} \,?*.dpkg-{bak,dist,new,old} \ call s:StripRepeat() " Stuff Tom cares about enough and edits often enough to type based on " filename patterns follows. " Apache config autocmd BufNewFile,BufRead \ .htaccess \,*/apache*/?*.conf \ setfiletype apache " AWK files autocmd BufNewFile,BufRead \ ?*.awk \ setfiletype awk " BIND zone file autocmd BufNewFile,BufRead \ */bind/db.?* \,*/namedb/db.?* \,named.root \ setfiletype bindzone " C files autocmd BufNewFile,BufRead \ ?*.c \,?*.h \ setfiletype c " C++ files autocmd BufNewFile,BufRead \ ?*.cpp \,?*.cxx \,?*.c++ \,?*.hh \ setfiletype cpp " crontab(5) files autocmd BufNewFile,BufRead \ crontab \,crontab.* \,cron.d/* \ setfiletype crontab " CSS files autocmd BufNewFile,BufRead \ ?*.css \ setfiletype css " CSV files autocmd BufNewFile,BufRead \ ?*.csv \ setfiletype csv " Diff and patch files autocmd BufNewFile,BufRead \ ?*.diff \,?*.patch \,?*.rej \ setfiletype diff " GTK settings files autocmd BufNewFile,BufRead \ .gktrc*, \,gktrc* \ setfiletype gtkrc " INI files autocmd BufNewFile,BufRead \ ?*.ini \ setfiletype dosini " DOT graphs autocmd BufNewFile,BufRead \ ?*.dot \ setfiletype dot " Forth autocmd BufNewFile,BufRead \ ?*.fs,?*.ft \ setfiletype forth " fstab(5) files autocmd BufNewFile,BufRead \ fstab \ setfiletype fstab " GDB init files autocmd BufNewFile,BufRead \ .gdbinit \ setfiletype gdb " Git commit messages autocmd BufNewFile,BufRead \ COMMIT_EDITMSG \,MERGE_MSG \,TAG_EDITMSG \ setfiletype gitcommit " Git config files autocmd BufNewFile,BufRead \ *.git/config \,.gitconfig \,.gitmodules \,gitconfig \ setfiletype gitconfig " Git rebase manifests autocmd BufNewFile,BufRead \ git-rebase-todo \ setfiletype gitrebase " GnuPG configuration files autocmd BufNewFile,BufRead \ *gnupg/options \,*gnupg/gpg.conf \ setfiletype gpg " UNIX group file autocmd BufNewFile,BufRead \ /etc/group \,/etc/group- \,/etc/group.edit \,/etc/gshadow \,/etc/gshadow- \,/etc/gshadow.edit \ setfiletype group " Vim help files autocmd BufNewFile,BufRead \ ~/.vim/doc/?*.txt \,$VIMRUNTIME/doc/?*.txt \ setfiletype help " HTML files autocmd BufNewFile,BufRead \ ?*.html \,?*.htm \ setfiletype html " inittab(5) files autocmd BufNewFile,BufRead \ inittab \ setfiletype inittab " Java files autocmd BufNewFile,BufRead \ ?*.java \,?*.jav \ setfiletype java " JSON files autocmd BufNewFile,BufRead \ ?*.js \ setfiletype javascript " JSON files autocmd BufNewFile,BufRead \ ?*.json \ setfiletype json " Lex files autocmd BufNewFile,BufRead \ ?*.l \,?*.lex \ setfiletype lex " Lua files autocmd BufNewFile,BufRead \ ?*.lua \ setfiletype lua " m4 files autocmd BufNewFile,BufRead \ ?*.m4 \ setfiletype m4 " Mail messages autocmd BufNewFile,BufRead \ ?*.msg \,mutt-*-[0-9]\+-[0-9]\+-[0-9]\+ \ setfiletype mail " Mail messages autocmd BufNewFile,BufRead \ aliases \ setfiletype mailaliases " Makefiles autocmd BufNewFile,BufRead \ Makefile \,makefile \ setfiletype make " Markdown files autocmd BufNewFile,BufRead \ ?*.markdown \,?*.md \ setfiletype markdown " Add automatic commands to detect .muttrc files autocmd BufNewFile,BufRead \ Muttrc \,*/muttrc.d/*.rc \,.muttrc \,/etc/Muttrc.d/* \ setfiletype muttrc " BIND configuration file autocmd BufNewFile,BufRead \ named.conf \,rndc.conf \,rndc.key \ setfiletype named " Nano configuration file autocmd BufNewFile,BufRead \ *.nanorc \,*/etc/nanorc \ setfiletype nanorc " netrc file autocmd BufNewFile,BufRead \ .netrc \,netrc \ setfiletype netrc " roff files autocmd BufNewFile,BufRead \ ?*.roff \,?*.[1-9] \,*/man[1-9]*/?*.[1-9]* \ setfiletype nroff " UNIX password and shadow files autocmd BufNewFile,BufRead \ /etc/passwd \,/etc/passwd- \,/etc/passwd.edit \,/etc/shadow \,/etc/shadow- \,/etc/shadow.edit \ setfiletype passwd " Perl 5 files autocmd BufNewFile,BufRead \ ?*.pl \,?*.pm \,*/t/?*.t \,*/xt/?*.t \,Makefile.PL \ setfiletype perl " Perl 6 files autocmd BufNewFile,BufRead \ ?*.p6 \,?*.pl6 \,?*.pm6 \ setfiletype perl6 " PHP files autocmd BufNewFile,BufRead \ ?*.php \ setfiletype php " Perl 5 POD files autocmd BufNewFile,BufRead \ ?*.pod \ setfiletype pod " Perl 6 POD files autocmd BufNewFile,BufRead \ ?*.pod6 \ setfiletype pod6 " Python files autocmd BufNewFile,BufRead \ ?*.py \ setfiletype python " Readline configuration file autocmd BufNewFile,BufRead \ .inputrc \,inputrc \ setfiletype readline " Remind files autocmd BufNewFile,BufRead \ .reminders \,?*.rem \,?*.remind \ setfiletype remind " robots.txt files autocmd BufNewFile,BufRead \ robots.txt \ setfiletype robots " Bash shell autocmd BufNewFile,BufRead \ ?*.bash \,.bash_aliases \,.bash_completion \,.bash_logout \,.bash_profile \,.bashrc \,bash-fc.?* \,bash_aliases \,bash_completion \,bash_logout \,bash_profile \,bashrc \ let b:is_bash = 1 \ | setfiletype sh " Korn shell autocmd BufNewFile,BufRead \ ?*.ksh \,.kshrc \,kshrc \ let b:is_kornshell = 1 \ | setfiletype sh " POSIX/Bourne shell autocmd BufNewFile,BufRead \ ?*.sh \,$ENV \,.profile \,.shinit \,.shrc \,.xinitrc \,/etc/default/* \,configure \,profile \,shinit \,shrc \,xinitrc \ let b:is_posix = 1 \ | setfiletype sh " sed files autocmd BufNewFile,BufRead \ ?*.sed \ setfiletype sed " Services files autocmd BufNewFile,BufRead \ /etc/services \ setfiletype services " OpenSSH configuration autocmd BufNewFile,BufRead \ ssh_config,*/.ssh/config \ setfiletype sshconfig " OpenSSH server configuration autocmd BufNewFile,BufRead \ sshd_config \ setfiletype sudoers " sudoers(5) autocmd BufNewFile,BufRead \ sudoers \,sudoers.tmp \ setfiletype sshdconfig " tmux configuration files autocmd BufNewFile,BufRead \ .tmux.conf \,tmux.conf \ setfiletype tmux " Ruby autocmd BufNewFile,BufRead \ ?*.rb \ setfiletype ruby " SQL autocmd BufNewFile,BufRead \ ?*.sql \ setfiletype sql " Subversion commit autocmd BufNewFile,BufRead \ svn-commit*.tmp \ setfiletype svn " Systemd unit files autocmd BufNewFile,BufRead \ */systemd/*.* \ setfiletype systemd " TCL autocmd BufNewFile,BufRead \ ?*.tcl \ setfiletype tcl " Terminfo autocmd BufNewFile,BufRead \ ?*.ti \ setf terminfo " Tidy config autocmd BufNewFile,BufRead \ .tidyrc \,tidyrc \ setfiletype tidy " Tab-separated (TSV) files autocmd BufNewFile,BufRead \ ?*.tsv \ setfiletype tsv " VimL files autocmd BufNewFile,BufRead \ ?*.vim \,*.exrc \,*.gvimrc \,*.vimrc \,_exrc \,_gvimrc \,_vimrc \,exrc \,gvimrc \,vimrc \ setfiletype vim " .viminfo files autocmd BufNewFile,BufRead \ .viminfo \ setfiletype viminfo " .wgetrc files autocmd BufNewFile,BufRead \ .wgetrc \,wgetrc \ setfiletype wget " Add automatic commands to find Xresources subfiles autocmd BufNewFile,BufRead \ .Xresources \,*/.Xresources.d/* \,Xresources \,*/Xresources.d/* \ setfiletype xdefaults " XHTML files autocmd BufNewFile,BufRead \ ?*.xhtml \,?*.xht \ setfiletype xhtml " XML files autocmd BufNewFile,BufRead \ ?*.xml \ setfiletype xml " Perl XS autocmd BufNewFile,BufRead \ ?*.xs \ setfiletype xs " Yacc files autocmd BufNewFile,BufRead \ ?*.y \,?*.yy \ setfiletype yacc " YAML files autocmd BufNewFile,BufRead \ ?*.yaml \ setfiletype yaml " Z shell files autocmd BufNewFile,BufRead \ ?*.zsh \,.zprofile \,.zshrc \,zprofile \,zshrc \ setfiletype zsh " Load any extra rules in ftdetect directories runtime! ftdetect/*.vim " Generic text, config, and log files, if no type assigned yet autocmd BufNewFile,BufRead \ ?*.text \,?*.txt \,INSTALL \,README \,/etc/issue \,/etc/motd \ setfiletype text autocmd BufNewFile,BufRead \ ?*.cfg \,?*.conf \,?*.config \,/etc/* \ setfiletype config autocmd BufNewFile,BufRead \ */log/* \,*.log \ setf messages " Clumsy attempt at typing files in `sudo -e` if a filename hasn't already " been found; strip temporary extension and re-run autocmd BufNewFile,BufRead \ /var/tmp/?*.???????? \ if !did_filetype() \ | call s:StripRepeat() \ | endif " If we *still* don't have a filetype, run the scripts.vim file that will " examine actual file contents--but only the first one; don't load the " system one at all autocmd BufNewFile,BufRead,StdinReadPost \ * \ if !did_filetype() \ | runtime scripts.vim \ | endif augroup END