mirror of
https://github.com/neovim/neovim.git
synced 2025-11-15 23:01:24 +00:00
This fixes an issue (#12573) where colorscheme files are sourced twice upon startup. This occurs when the startup script calls `:colorscheme`, which sets the `g:colors_name` global variable. When syntax highlighting is enabled in `syn_maybe_enable()` the `syntax.vim` script is sourced which in turn sources `synload.vim`. This script checks to see if `g:colors_name` is set and, if so, runs exe "colors " . colors_name This is done to ensure that highlight groups are defined before enabling the syntax highlighting engine. Instead, source syncolors.vim before the startup scripts which sets up default highlights and only load the full syntax engine after the startup scripts or when the user runs `:syntax on`. Add a guard variable `did_syncolor` to prevent syncolor.vim from being sourced twice and remove the line mentioned above from synload.vim so that the colorscheme file is not re-sourced when the syntax engine is loaded.
83 lines
2.0 KiB
VimL
83 lines
2.0 KiB
VimL
" Vim syntax support file
|
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
|
" Last Change: 2020 Apr 13
|
|
|
|
" This file sets up for syntax highlighting.
|
|
" It is loaded from "syntax.vim" and "manual.vim".
|
|
" 1. Set the default highlight groups.
|
|
" 2. Install Syntax autocommands for all the available syntax files.
|
|
|
|
if !has("syntax")
|
|
finish
|
|
endif
|
|
|
|
" let others know that syntax has been switched on
|
|
let syntax_on = 1
|
|
|
|
" Set the default highlighting colors
|
|
if !exists("colors_name") && !exists("did_syncolor")
|
|
runtime! syntax/syncolor.vim
|
|
endif
|
|
|
|
" Line continuation is used here, remove 'C' from 'cpoptions'
|
|
let s:cpo_save = &cpo
|
|
set cpo&vim
|
|
|
|
" First remove all old syntax autocommands.
|
|
au! Syntax
|
|
|
|
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. Skip empty entries.
|
|
for name in split(s, '\.')
|
|
if !empty(name)
|
|
exe "runtime! syntax/" . name . ".vim syntax/" . name . "/*.vim"
|
|
exe "runtime! syntax/" . name . ".lua syntax/" . name . "/*.lua"
|
|
endif
|
|
endfor
|
|
endif
|
|
endfun
|
|
|
|
|
|
" Handle adding doxygen to other languages (C, C++, C#, IDL, java, php, DataScript)
|
|
au Syntax c,cpp,cs,idl,java,php,datascript
|
|
\ if (exists('b:load_doxygen_syntax') && b:load_doxygen_syntax)
|
|
\ || (exists('g:load_doxygen_syntax') && g:load_doxygen_syntax)
|
|
\ | runtime! syntax/doxygen.vim
|
|
\ | endif
|
|
|
|
|
|
" Source the user-specified syntax highlighting file
|
|
if exists("mysyntaxfile")
|
|
let s:fname = expand(mysyntaxfile)
|
|
if filereadable(s:fname)
|
|
execute "source " . fnameescape(s:fname)
|
|
endif
|
|
endif
|
|
|
|
" Restore 'cpoptions'
|
|
let &cpo = s:cpo_save
|
|
unlet s:cpo_save
|