vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 850aace4655253ec6faf36e907e22a2b2afea3a8
parent e7124290a25f54225251bccec36e29f85db25360
Author: Tinmarino <tinmarino@gmail.com>
Date:   Sun, 10 Jan 2021 13:00:54 -0300

Conf: #1060 Get configurable schemes_web

Permit opening file with name "ssh: name with spaces.md"

Diffstat:
Mautoload/vimwiki/base.vim | 10+++++++++-
Mautoload/vimwiki/path.vim | 13+++++++++++--
Mautoload/vimwiki/vars.vim | 31+++++++++++++++++--------------
Mdoc/vimwiki.txt | 27++++++++++++++++++---------
Msyntax/vimwiki.vim | 5+++--
Msyntax/vimwiki_markdown_custom.vim | 4++--
6 files changed, 60 insertions(+), 30 deletions(-)

diff --git 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 @@ -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 @@ -172,6 +172,13 @@ function! s:get_default_global() abort \ 'map_prefix': {'type': type(''), 'default': '<Leader>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 <leader>w<leader>w 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 @@ -616,7 +616,7 @@ TABLE MAPPINGS, INSERT MODE *vimwiki-table-mappings* to the largest cell. Remap command: `<Plug>VimwikiTableNextCell` - *vimwiki_i_<Tab>_table* + *vimwiki_i_<S-Tab>_table* <S-Tab> Go to the previous table cell. Adjusts the whole column width according to the largest cell. Remap command: `<Plug>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 @@ -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 @@ -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]