diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index 14592cf..81c9c45 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -824,7 +824,7 @@ function! s:update_wiki_links_dir(dir, old_fname, new_fname) " {{{ let new_fname = a:new_fname let old_fname_r = vimwiki#base#apply_template( - \ vimwiki#vars#get_global('WikiLinkMatchUrlTemplate'), old_fname, '', '') + \ vimwiki#vars#get_syntaxlocal('WikiLinkMatchUrlTemplate'), old_fname, '', '') let files = split(glob(vimwiki#vars#get_wikilocal('path').a:dir.'*'.vimwiki#vars#get_wikilocal('ext')), '\n') for fname in files @@ -1056,7 +1056,7 @@ endfunction "}}} " WIKI link following functions {{{ " vimwiki#base#find_next_link function! vimwiki#base#find_next_link() "{{{ - call vimwiki#base#search_word(vimwiki#vars#get_global('rxAnyLink'), '') + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), '') endfunction " }}} " vimwiki#base#find_prev_link @@ -1064,9 +1064,9 @@ function! vimwiki#base#find_prev_link() "{{{ "Jump 2 times if the cursor is in the middle of a link if synIDattr(synID(line('.'), col('.'), 0), "name") =~# "VimwikiLink.*" && \ synIDattr(synID(line('.'), col('.')-1, 0), "name") =~# "VimwikiLink.*" - call vimwiki#base#search_word(vimwiki#vars#get_global('rxAnyLink'), 'b') + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') endif - call vimwiki#base#search_word(vimwiki#vars#get_global('rxAnyLink'), 'b') + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') endfunction " }}} " vimwiki#base#follow_link @@ -1094,8 +1094,8 @@ function! vimwiki#base#follow_link(split, ...) "{{{ Parse link at cursor and pas endif " try WikiLink - let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiLink')), - \ vimwiki#vars#get_global('rxWikiLinkMatchUrl')) + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) " try WikiIncl if lnk == "" let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')), @@ -1221,7 +1221,7 @@ function! vimwiki#base#rename_link() "{{{ return endif - let url = matchstr(new_link, vimwiki#vars#get_global('rxWikiLinkMatchUrl')) + let url = matchstr(new_link, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) if url != '' let new_link = url endif @@ -1763,12 +1763,12 @@ endfunction " }}} function! s:normalize_link_syntax_n() " {{{ " try WikiLink - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiLink')) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_global('rxWikiLinkMatchUrl'), vimwiki#vars#get_global('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_global('rxWikiLinkMatchDescr'), \ vimwiki#vars#get_global('WikiLinkTemplate2')) - call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_global('rxWikiLink'), sub) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink'), sub) return endif diff --git a/autoload/vimwiki/html.vim b/autoload/vimwiki/html.vim index 671ddc1..944e857 100644 --- a/autoload/vimwiki/html.vim +++ b/autoload/vimwiki/html.vim @@ -424,7 +424,7 @@ function! s:tag_wikilink(value) "{{{ " [[url#a1#a2]] -> url#a1#a2 " [[#a1#a2]] -> #a1#a2 let str = a:value - let url = matchstr(str, vimwiki#vars#get_global('rxWikiLinkMatchUrl')) + let url = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) let descr = matchstr(str, vimwiki#vars#get_global('rxWikiLinkMatchDescr')) let descr = (substitute(descr,'^\s*\(.*\)\s*$','\1','') != '' ? descr : url) @@ -571,7 +571,7 @@ endfunction " }}} function! s:process_tags_links(line) " {{{ let line = a:line - let line = s:make_tag(line, vimwiki#vars#get_global('rxWikiLink'), 's:tag_wikilink') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWikiLink'), 's:tag_wikilink') let line = s:make_tag(line, vimwiki#vars#get_global('rxWikiIncl'), 's:tag_wikiincl') let line = s:make_tag(line, vimwiki#vars#get_global('rxWeblink'), 's:tag_weblink') return line diff --git a/autoload/vimwiki/markdown_base.vim b/autoload/vimwiki/markdown_base.vim index 7412176..429e2c5 100644 --- a/autoload/vimwiki/markdown_base.vim +++ b/autoload/vimwiki/markdown_base.vim @@ -8,7 +8,7 @@ " vimwiki#markdown_base#reset_mkd_refs function! vimwiki#markdown_base#reset_mkd_refs() "{{{ - call VimwikiClear('markdown_refs') + call vimwiki#vars#set_bufferlocal('markdown_refs', {}) endfunction "}}} " vimwiki#markdown_base#scan_reflinks @@ -92,8 +92,8 @@ function! vimwiki#markdown_base#follow_link(split, ...) "{{{ Parse link at curso endif " try WikiLink - let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiLink')), - \ vimwiki#vars#get_global('rxWikiLinkMatchUrl')) + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) " try WikiIncl if lnk == "" let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')), @@ -142,7 +142,7 @@ function! s:normalize_link_syntax_n() " {{{ let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_global('rxWikiLinkMatchUrl'), vimwiki#vars#get_global('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_global('rxWikiLinkMatchDescr'), \ vimwiki#vars#get_syntaxlocal('WikiLink1Template2')) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'), sub) return @@ -152,7 +152,7 @@ function! s:normalize_link_syntax_n() " {{{ let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_global('rxWikiLinkMatchUrl'), vimwiki#vars#get_global('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_global('rxWikiLinkMatchDescr'), \ vimwiki#vars#get_global('WikiLinkTemplate2')) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), sub) return diff --git a/autoload/vimwiki/tags.vim b/autoload/vimwiki/tags.vim index 8b2c249..490b47d 100644 --- a/autoload/vimwiki/tags.vim +++ b/autoload/vimwiki/tags.vim @@ -326,7 +326,7 @@ function! vimwiki#tags#generate_tags(...) abort "{{{ let links_rx = '\m\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxH2').'\)\|\%(^\s*' \ .vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' - \ .vimwiki#vars#get_global('rxWikiLink').'$\)' + \ .vimwiki#vars#get_syntaxlocal('rxWikiLink').'$\)' call vimwiki#base#update_listing_in_buffer(lines, 'Generated Tags', links_rx, \ line('$')+1, 1) diff --git a/autoload/vimwiki/u.vim b/autoload/vimwiki/u.vim index fa91bf7..009bf9d 100644 --- a/autoload/vimwiki/u.vim +++ b/autoload/vimwiki/u.vim @@ -46,11 +46,6 @@ function vimwiki#u#reload_regexes() "{{{ execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim' endfunction "}}} -" Load omnipresent Wiki syntax -function vimwiki#u#reload_omni_regexes() "{{{ - execute 'runtime! syntax/omnipresent_syntax.vim' -endfunction "}}} - " Load syntax-specific functionality function vimwiki#u#reload_regexes_custom() "{{{ execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim' diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim index d34a032..0d915df 100644 --- a/autoload/vimwiki/vars.vim +++ b/autoload/vimwiki/vars.vim @@ -95,18 +95,6 @@ function! s:populate_global_variables() let g:vimwiki_global_vars.WikiLinkTemplate2 = wikilink_prefix . '__LinkUrl__'. wikilink_separator \ . '__LinkDescription__' . wikilink_suffix - " template for matching all wiki links with a given target file - let g:vimwiki_global_vars.WikiLinkMatchUrlTemplate = - \ g:vimwiki_global_vars.rx_wikilink_prefix . - \ '\zs__LinkUrl__\ze\%(#.*\)\?' . - \ g:vimwiki_global_vars.rx_wikilink_suffix . - \ '\|' . - \ g:vimwiki_global_vars.rx_wikilink_prefix . - \ '\zs__LinkUrl__\ze\%(#.*\)\?' . - \ g:vimwiki_global_vars.rx_wikilink_separator . - \ '.*' . - \ g:vimwiki_global_vars.rx_wikilink_suffix - let valid_chars = '[^\\\]]' let g:vimwiki_global_vars.rxWikiLinkUrl = valid_chars.'\{-}' let g:vimwiki_global_vars.rxWikiLinkDescr = valid_chars.'\{-}' @@ -118,14 +106,6 @@ function! s:populate_global_variables() let g:vimwiki_global_vars.rxWord = '[^[:blank:]!"$%&''()*+,:;<=>?\[\]\\^`{}]\+' " [[URL]], or [[URL|DESCRIPTION]] - " a) match [[URL|DESCRIPTION]] - let g:vimwiki_global_vars.rxWikiLink = g:vimwiki_global_vars.rx_wikilink_prefix. - \ g:vimwiki_global_vars.rxWikiLinkUrl.'\%('.g:vimwiki_global_vars.rx_wikilink_separator. - \ g:vimwiki_global_vars.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix - " b) match URL within [[URL|DESCRIPTION]] - let g:vimwiki_global_vars.rxWikiLinkMatchUrl = g:vimwiki_global_vars.rx_wikilink_prefix. - \ '\zs'. g:vimwiki_global_vars.rxWikiLinkUrl.'\ze\%('. g:vimwiki_global_vars.rx_wikilink_separator. - \ g:vimwiki_global_vars.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix " c) match DESCRIPTION within [[URL|DESCRIPTION]] let g:vimwiki_global_vars.rxWikiLinkMatchDescr = g:vimwiki_global_vars.rx_wikilink_prefix. \ g:vimwiki_global_vars.rxWikiLinkUrl . g:vimwiki_global_vars.rx_wikilink_separator.'\%('. @@ -176,9 +156,6 @@ function! s:populate_global_variables() " 0b) match DESCRIPTION within URL let g:vimwiki_global_vars.rxWeblinkMatchDescr = '' - let g:vimwiki_global_vars.rxAnyLink = g:vimwiki_global_vars.rxWikiLink.'\|'. - \ g:vimwiki_global_vars.rxWikiIncl.'\|'.g:vimwiki_global_vars.rxWeblink - let g:vimwiki_global_vars.rxTodo = '\C\%(TODO:\|DONE:\|STARTED:\|FIXME:\|FIXED:\|XXX:\)' " default colors when headers of different levels are highlighted differently @@ -370,6 +347,113 @@ function! vimwiki#vars#populate_syntax_vars(syntax) else let g:vimwiki_syntax_variables[a:syntax].rxListItemAndChildren = '^\(\s*\)\%('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\|'.g:vimwiki_syntax_variables[a:syntax].rxListNumber.'\)\s\+\['.g:vimwiki_syntax_variables[a:syntax].listsyms_list[4].'\]\s.*\%(\n\%(\1\s.*\|^$\)\)*' endif + + " template for matching all wiki links with a given target file + let g:vimwiki_syntax_variables[a:syntax].WikiLinkMatchUrlTemplate = + \ g:vimwiki_global_vars.rx_wikilink_prefix . + \ '\zs__LinkUrl__\ze\%(#.*\)\?' . + \ g:vimwiki_global_vars.rx_wikilink_suffix . + \ '\|' . + \ g:vimwiki_global_vars.rx_wikilink_prefix . + \ '\zs__LinkUrl__\ze\%(#.*\)\?' . + \ g:vimwiki_global_vars.rx_wikilink_separator . + \ '.*' . + \ g:vimwiki_global_vars.rx_wikilink_suffix + + " a) match [[URL|DESCRIPTION]] + let g:vimwiki_syntax_variables[a:syntax].rxWikiLink = g:vimwiki_global_vars.rx_wikilink_prefix. + \ g:vimwiki_global_vars.rxWikiLinkUrl.'\%('.g:vimwiki_global_vars.rx_wikilink_separator. + \ g:vimwiki_global_vars.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix + let g:vimwiki_syntax_variables[a:syntax].rxAnyLink = g:vimwiki_syntax_variables[a:syntax].rxWikiLink.'\|'. + \ g:vimwiki_global_vars.rxWikiIncl.'\|'.g:vimwiki_global_vars.rxWeblink + " b) match URL within [[URL|DESCRIPTION]] + let g:vimwiki_syntax_variables[a:syntax].rxWikiLinkMatchUrl = g:vimwiki_global_vars.rx_wikilink_prefix. + \ '\zs'. g:vimwiki_global_vars.rxWikiLinkUrl.'\ze\%('. g:vimwiki_global_vars.rx_wikilink_separator. + \ g:vimwiki_global_vars.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix + + if a:syntax ==# 'markdown' + call s:populate_extra_markdown_vars() + endif +endfunction + + +function! s:populate_extra_markdown_vars() + let mkd_syntax = g:vimwiki_syntax_variables['markdown'] + + " 0a) match [[URL|DESCRIPTION]] + let mkd_syntax.vimwiki_rxWikiLink0 = mkd_syntax.rxWikiLink + " 0b) match URL within [[URL|DESCRIPTION]] + let mkd_syntax.vimwiki_rxWikiLink0MatchUrl = mkd_syntax.rxWikiLinkMatchUrl + " 0c) match DESCRIPTION within [[URL|DESCRIPTION]] + let mkd_syntax.vimwiki_rxWikiLink0MatchDescr = g:vimwiki_global_vars.rxWikiLinkMatchDescr + + let wikilink_md_prefix = '[' + let wikilink_md_suffix = ']' + let wikilink_md_separator = '][' + let rx_wikilink_md_separator = vimwiki#u#escape(wikilink_md_separator) + let mkd_syntax.rx_wikilink_md_prefix = vimwiki#u#escape(wikilink_md_prefix) + let mkd_syntax.rx_wikilink_md_suffix = vimwiki#u#escape(wikilink_md_suffix) + + " [URL][] + let mkd_syntax.WikiLink1Template1 = wikilink_md_prefix . '__LinkUrl__'. + \ wikilink_md_separator. wikilink_md_suffix + " [DESCRIPTION][URL] + let mkd_syntax.WikiLink1Template2 = wikilink_md_prefix. '__LinkDescription__'. + \ wikilink_md_separator. '__LinkUrl__'. wikilink_md_suffix + let mkd_syntax.WikiLinkMatchUrlTemplate .= + \ '\|' . + \ mkd_syntax.rx_wikilink_md_prefix . + \ '.*' . + \ rx_wikilink_md_separator . + \ '\zs__LinkUrl__\ze\%(#.*\)\?' . + \ mkd_syntax.rx_wikilink_md_suffix . + \ '\|' . + \ mkd_syntax.rx_wikilink_md_prefix . + \ '\zs__LinkUrl__\ze\%(#.*\)\?' . + \ rx_wikilink_md_separator . + \ mkd_syntax.rx_wikilink_md_suffix + +let valid_chars = '[^\\\[\]]' +let mkd_syntax.rxWikiLink1Url = valid_chars.'\{-}' +let mkd_syntax.rxWikiLink1Descr = valid_chars.'\{-}' +let mkd_syntax.rxWikiLink1InvalidPrefix = '[\]\[]\@