If I open a random file (in this case, say `.zshrc`) in a blank vim with no rc file , but with vi compatibility forcing off vim -N -u NORC ~/.zshrc As expected vim will launch and display `.zshrc` without syntax highlighting. ### attempt to enable syntax highlighting I have a file containing a collection of `highlight` commands called `darcula.vim` in ~/.vim/colors/darcula.vim contents of `~/.vim/colors/darcula.vim` " " Darcula colorscheme for VIM. " set background=dark highlight clear if exists("syntax_on") syntax reset endif let g:colors_name = "darcula" hi Cursor ctermfg=188 ctermbg=250 cterm=NONE guifg=#2b2b2b guibg=#a9b7c6 gui=NONE hi Visual ctermfg=NONE ctermbg=24 cterm=NONE guifg=NONE guibg=#214283 gui=NONE hi CursorLine ctermfg=NONE ctermbg=236 cterm=NONE guifg=NONE guibg=#323232 gui=NONE hi CursorColumn ctermfg=NONE ctermbg=236 cterm=NONE guifg=NONE guibg=#313335 gui=NONE [ ... plus many more highlight commands ...] at vims command line I enter :colorscheme darcula then, to check if the highlight commands have been loaded, I run :hi and yes vim is showing all the `hi` commands from the above `darcula.vim` file have been loaded. Then I run :syntax enable and nothing happens from reading `:h syntax-loading` I thought the syntax enable command sets up filetype autocmd recognition, as verified with: :filetype filetype detection:ON plugin:OFF indent:OFF and also sets up autocommand which will run the vim function `SynSet()` on the autocommand event `Syntax`, from the file `$VIMRUNTIME/syntax/synload.vim` [...] au Syntax * call s:SynSet() fun! s:SynSet() " clear syntax for :set syntax=OFF and any syntax name that doesn't exist syn clear if exists("b:current_syntax") unlet b:current_syntax endif let s = expand("<amatch>") if s == "ON" " :set syntax=ON if &filetype == "" echohl ErrorMsg echo "filetype unknown" echohl None endif let s = &filetype elseif s == "OFF" let s = "" endif if s != "" " Load the syntax file(s). When there are several, separated by dots, " load each in sequence. for name in split(s, '\.') exe "runtime! syntax/" . name . ".vim syntax/" . name . "/*.vim" endfor endif endfun [...] which looks like it will use the filetype and run the appropriate syntax file. To me this looks like Ive covered everything, but I obviously havent, why isn't syntax highlighting happening here?