mirror of
https://github.com/prabirshrestha/vim-lsp.git
synced 2026-06-09 15:37:30 +02:00
f36410202e
1. Do not clear Conceal highlight group 2. Do not highlight concealed chars by using syntax region. This fixes different background of concealed cchar and popup window original solution had. See #719 for details.
51 lines
1.7 KiB
VimL
51 lines
1.7 KiB
VimL
" Converts a markdown language (```foo) to the corresponding Vim filetype
|
|
function! s:get_vim_filetype(lang_markdown) abort
|
|
" If the user hasn't customised markdown fenced languages, just return the
|
|
" markdown language
|
|
if !exists('g:markdown_fenced_languages')
|
|
return a:lang_markdown
|
|
endif
|
|
|
|
" Otherwise, check if it has an entry for the given language
|
|
for l:type in g:markdown_fenced_languages
|
|
let l:vim_type = substitute(matchstr(l:type, '[^=]*$'), '\..*', '', '')
|
|
let l:markdown_type = matchstr(l:type, '[^=]*')
|
|
|
|
if l:markdown_type ==# a:lang_markdown
|
|
" Found entry
|
|
return l:vim_type
|
|
endif
|
|
endfor
|
|
|
|
" Not found
|
|
return a:lang_markdown
|
|
endfunction
|
|
|
|
function! s:do_highlight() abort
|
|
if exists('b:lsp_syntax_highlights')
|
|
for l:entry in b:lsp_syntax_highlights
|
|
let l:line = l:entry['line']
|
|
let l:lang = l:entry['language']
|
|
let l:ft = s:get_vim_filetype(l:lang)
|
|
|
|
execute printf('syntax match markdownHighlight%s contains=@markdownHighlight%s /^\%%%sl.*$/', l:ft, l:ft, l:line)
|
|
endfor
|
|
endif
|
|
endfunction
|
|
|
|
function! s:cleanup_markdown() abort
|
|
" Don't highlight _ in words
|
|
syntax match markdownError "\w\@<=\w\@="
|
|
|
|
" Conceal escaped characters
|
|
" Workaround for: https://github.com/palantir/python-language-server/issues/386
|
|
if has('conceal')
|
|
for l:escaped_char in ['`', '*', '_', '{', '}', '(', ')', '<', '>', '#', '+', '.', '!', '-']
|
|
execute printf('syntax region vimLspMarkdownEscape matchgroup=Conceal start="\\\ze[%s]" end="[%s]\zs" concealends', l:escaped_char, l:escaped_char)
|
|
endfor
|
|
end
|
|
endfunction
|
|
|
|
call s:do_highlight()
|
|
call s:cleanup_markdown()
|