diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index 0d21284..97507ef 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -182,7 +182,12 @@ function! vimwiki#base#resolve_link(link_text, ...) abort endif " Check if absolute or relative path + " TODO Clean that => just one call let is_absolute = 0 + if vimwiki#path#is_absolute(link_text) + let is_absolute = 1 + let link_text = expand(link_text) + endif if is_wiki_link && link_text[0] ==# '/' if link_text !=# '/' if link_text !=# '//' && link_text[0:1] ==# '//' @@ -234,8 +239,9 @@ function! vimwiki#base#resolve_link(link_text, ...) abort return link_infos endif endif + if is_absolute - let root_dir = '' + let root_dir = '' elseif !is_relative || link_infos.index != source_wiki let root_dir = vimwiki#vars#get_wikilocal('path', link_infos.index) endif @@ -262,8 +268,10 @@ function! vimwiki#base#resolve_link(link_text, ...) abort \ vimwiki#vars#get_wikilocal('diary_rel_path', link_infos.index) . \ link_text . \ vimwiki#vars#get_wikilocal('ext', link_infos.index) + elseif (link_infos.scheme ==# 'file' || link_infos.scheme ==# 'local') && is_relative let link_infos.filename = simplify(root_dir . link_text) + else " absolute file link " collapse repeated leading "/"'s within a link let link_text = substitute(link_text, '\m^/\+', '/', '') diff --git a/autoload/vimwiki/path.vim b/autoload/vimwiki/path.vim index d259136..6281fcf 100644 --- a/autoload/vimwiki/path.vim +++ b/autoload/vimwiki/path.vim @@ -204,11 +204,20 @@ endfunction function! vimwiki#path#is_absolute(path) abort " Check: if path is absolute + let res=0 + + " Match 'C:' or '/' or '~' if vimwiki#u#is_windows() - return a:path =~? '\m^\a:' + let res += a:path =~? '\m^\a:' else - return a:path =~# '\m^/\|\~/' + let res += a:path =~# '\m^/\|\~/' endif + + " Do not prepent root_path to scp files + " See: https://vim.fandom.com/wiki/Editing_remote_files_via_scp_in_vim + let res += a:path =~# '\m^scp:' + + return res endfunction diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim index 6d509b3..ed1a731 100644 --- a/autoload/vimwiki/vars.vim +++ b/autoload/vimwiki/vars.vim @@ -172,6 +172,13 @@ function! s:get_default_global() abort \ 'map_prefix': {'type': type(''), 'default': 'w'}, \ 'markdown_header_style': {'type': type(0), 'default': 1, 'min':0, 'max': 2}, \ 'menu': {'type': type(''), 'default': 'Vimwiki'}, + \ 'schemes_web': {'type': type([]), 'default': + \ [ + \ 'http', 'https', 'file', 'ftp', 'gopher', 'telnet', 'nntp', 'ldap', + \ 'rsync', 'imap', 'pop', 'irc', 'ircs', 'cvs', 'svn', 'svn+ssh', + \ 'git', 'ssh', 'fish', 'sftp', + \ ]}, + \ 'schemes_any': {'type': type([]), 'default': ['mailto', 'news', 'xmpp', 'sip', 'sips', 'doi', 'urn', 'tel', 'data']}, \ 'table_auto_fmt': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, \ 'table_reduce_last_col': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'table_mappings': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, @@ -205,22 +212,18 @@ function! s:internal_global_settings() abort " able to ww without opening any vimwiki file first " Know internal schemes - let g:vimwiki_global_vars.schemes = join(['wiki\d\+', 'diary', 'local'], '\|') - " Are used in markdown for image links - let g:vimwiki_global_vars.web_schemes1 = join(['http', 'https', 'file', 'ftp', 'gopher', - \ 'telnet', 'nntp', 'ldap', 'rsync', 'imap', 'pop', 'irc', 'ircs', 'cvs', 'svn', 'svn+ssh', - \ 'git', 'ssh', 'fish', 'sftp'], '\|') - - " Other possible schemes - let web_schemes2 = - \ join(['mailto', 'news', 'xmpp', 'sip', 'sips', 'doi', 'urn', 'tel', 'data'], '\|') + let g:vimwiki_global_vars.schemes_web = + \ join(vimwiki#vars#get_global('schemes_web'), '\|') + let g:vimwiki_global_vars.schemes_any = + \ join(vimwiki#vars#get_global('schemes_any'), '\|') + let g:vimwiki_global_vars.schemes_local = join(['wiki\d\+', 'diary', 'local'], '\|') " Concatenate known schemes => regex let g:vimwiki_global_vars.rxSchemes = '\%('. - \ g:vimwiki_global_vars.schemes . '\|'. - \ g:vimwiki_global_vars.web_schemes1 . '\|'. - \ web_schemes2 . + \ g:vimwiki_global_vars.schemes_local . '\|'. + \ g:vimwiki_global_vars.schemes_web . '\|'. + \ g:vimwiki_global_vars.schemes_any . \ '\)' " Match URL for common protocols; see http://en.wikipedia.org/wiki/URI_scheme @@ -228,11 +231,11 @@ function! s:internal_global_settings() abort let rxWebProtocols = \ '\%('. \ '\%('. - \ '\%('.g:vimwiki_global_vars.web_schemes1 . '\):'. + \ '\%('. g:vimwiki_global_vars.schemes_web . '\):'. \ '\%(//\)'. \ '\)'. \ '\|'. - \ '\%('.web_schemes2.'\):'. + \ '\%('. g:vimwiki_global_vars.schemes_any .'\):'. \ '\)' let g:vimwiki_global_vars.rxWeblinkUrl = rxWebProtocols . '\S\{-1,}'. '\%(([^ \t()]*)\)\=' diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt index dce93be..22c7ca2 100644 --- a/doc/vimwiki.txt +++ b/doc/vimwiki.txt @@ -616,7 +616,7 @@ TABLE MAPPINGS, INSERT MODE *vimwiki-table-mappings* to the largest cell. Remap command: `VimwikiTableNextCell` - *vimwiki_i__table* + *vimwiki_i__table* Go to the previous table cell. Adjusts the whole column width according to the largest cell. Remap command: `VimwikiTablePrevCell` @@ -1023,7 +1023,7 @@ For Markdown syntax these variations are used: > Furthermore, there are a number of words which are highlighted extra flashy: TODO, DONE, STARTED, FIXME, FIXED, XXX (customisable, see -vimwiki-option-rx_todo). +|g:vimwiki-option-rx_todo|). When rendered as HTML, code blocks containing only a hash prefixed 6 digit hex number will be colored as themselves. For example > @@ -2830,8 +2830,8 @@ This setting specifies the URL where the generated VimWiki HTML pages can be reached. It is used for the link to the RSS feed and for links to the diary entries inside the feed. ------------------------------------------------------------------------------- *g:vimwiki_toc_header* +------------------------------------------------------------------------------ A string with the magic header that tells Vimwiki where the Table of Contents (see |vimwiki-toc|) is located in a file. You can change it to the @@ -2840,16 +2840,16 @@ appropriate word in your mother tongue like this: > The default is 'Contents'. ------------------------------------------------------------------------------- *g:vimwiki_toc_header_level* +------------------------------------------------------------------------------ The header level of the Table of Contents (see |vimwiki-toc|). Valid values are from 1 to 6. The default is 1. ------------------------------------------------------------------------------- *g:vimwiki_toc_link_format* +------------------------------------------------------------------------------ The format of the links in the Table of Contents (see |vimwiki-toc|). @@ -2862,8 +2862,8 @@ Value Description~ Default: 0 ------------------------------------------------------------------------------- *vimwiki-option-color_dic* +------------------------------------------------------------------------------ Dictionary containing the possible html colors for |:VimwikiColorize| the keys are the color names used as argument, the values are a list [foreground, @@ -2875,16 +2875,16 @@ Provides two colors to |:VimwikiColorize|: 'red' => red foreground and 'bred' => red background. ------------------------------------------------------------------------------- *g:vimwiki-option-rx_todo* +------------------------------------------------------------------------------ Regular expression used to highlight different TODO words. Default: `\C\<\%(TODO\|DONE\|STARTED\|FIXME\|FIXED\|XXX\)\>` ------------------------------------------------------------------------------- *vimwiki-option-color_tag_template* +------------------------------------------------------------------------------ Not supposed to be edited already: a regex with __COLORFG__, __COLORBG__ and __CONTENT__ placeholders to surround the content with a tag to define its @@ -2915,6 +2915,16 @@ Where: - `global_ext` is the option name - `1` is the option value +------------------------------------------------------------------------------ +*g:vimwiki_schemes_web* *g:vimwiki_schemes_any* + +List of know schemes. shemes_web will match if there is a "//" like in +https://github.com + +Example: ~ +let g:vimwiki_schemes_web = ['http', 'https'] +Default:~ +['http', 'https', 'file', ... , 'git', 'ssh', 'fish', 'sftp'] ------------------------------------------------------------------------------ *g:vimwiki_hl_headers* @@ -2927,7 +2937,6 @@ Value Description~ 0 Use |hl-Title| color for headers. Default: 0 - ------------------------------------------------------------------------------ *g:vimwiki_hl_cb_checked* diff --git a/syntax/vimwiki.vim b/syntax/vimwiki.vim index 2de7108..e6eb234 100644 --- a/syntax/vimwiki.vim +++ b/syntax/vimwiki.vim @@ -118,10 +118,11 @@ call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink'), 'VimwikiL " WikiLink: " All remaining schemes are highlighted automatically let s:rxSchemes = '\%('. - \ vimwiki#vars#get_global('schemes') . '\|'. - \ vimwiki#vars#get_global('web_schemes1'). + \ vimwiki#vars#get_global('schemes_local') . '\|'. + \ vimwiki#vars#get_global('schemes_web'). \ '\):' + " a) match [[nonwiki-scheme-URL]] let s:target = vimwiki#base#apply_template( \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate1')), diff --git a/syntax/vimwiki_markdown_custom.vim b/syntax/vimwiki_markdown_custom.vim index f29b149..7d150fb 100644 --- a/syntax/vimwiki_markdown_custom.vim +++ b/syntax/vimwiki_markdown_custom.vim @@ -105,8 +105,8 @@ call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxImage'), 'VimwikiIma " WikiLink " All remaining schemes are highlighted automatically let s:rxSchemes = '\%('. - \ vimwiki#vars#get_global('schemes') . '\|'. - \ vimwiki#vars#get_global('web_schemes1'). + \ vimwiki#vars#get_global('schemes_local') . '\|'. + \ vimwiki#vars#get_global('schemes_web'). \ '\):' " a) match [nonwiki-scheme-URL]