diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index 7d3305e..05a8a1d 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -328,10 +328,6 @@ endfunction " }}} function! vimwiki#base#resolve_scheme(lnk, as_html) " {{{ Resolve scheme let lnk = a:lnk - " a link starting with # means current file with an anchor - if lnk =~ '^#' - let lnk = expand('%:t:r').lnk - endif " if link is schemeless add wikiN: scheme let is_schemeless = lnk !~ g:vimwiki_rxSchemeUrl @@ -458,6 +454,14 @@ function! vimwiki#base#resolve_scheme(lnk, as_html) " {{{ Resolve scheme let url = path.subdir.lnk.ext endif + " lnk and url should be '' if the given wiki link has the form [[#anchor]]. + " We cannot do lnk = expand('%:t:r') or so, because this function is called + " from vimwiki#html#WikiAll2HTML() for many files, so expand('%:t:r') + " doesn't give the currently processed file + if lnk == '' + let url = '' + endif + " result return [idx, scheme, path, subdir, lnk, ext, url, anchor] endfunction "}}} @@ -506,7 +510,7 @@ function! vimwiki#base#open_link(cmd, link, ...) "{{{ let [idx, scheme, path, subdir, lnk, ext, url, anchor] = \ vimwiki#base#resolve_scheme(a:link, 0) - if url == '' + if path == '' if g:vimwiki_debug echom 'open_link: idx='.idx.', scheme='.scheme.', path='.path.', subdir='.subdir.', lnk='.lnk.', ext='.ext.', url='.url.', anchor='.anchor endif @@ -514,6 +518,11 @@ function! vimwiki#base#open_link(cmd, link, ...) "{{{ return endif + if url == '' + let lnk = expand('%:t:r') + let url = path.subdir.lnk.ext + endif + let update_prev_link = ( (scheme == '' || scheme =~ 'wiki' || scheme =~ 'diary') \ && lnk != expand('%:t:r') \ ? 1 : 0) diff --git a/autoload/vimwiki/html.vim b/autoload/vimwiki/html.vim index f3e2854..d9a5f81 100644 --- a/autoload/vimwiki/html.vim +++ b/autoload/vimwiki/html.vim @@ -390,7 +390,6 @@ function! s:tag_wikiincl(value) "{{{ let url = escape(url, '#') let line = vimwiki#html#linkify_image(url, descr, verbatim_str) - return line endif return line endfunction "}}} @@ -402,7 +401,7 @@ function! s:tag_wikilink(value) "{{{ " [[fileurl.ext|descr]] -> descr " [[dirurl/|descr]] -> descr " [[url#a1#a2]] -> url#a1#a2 - " [[#a1#a2]] -> #a1#a2 + " [[#a1#a2]] -> #a1#a2 let str = a:value let url = matchstr(str, g:vimwiki_rxWikiLinkMatchUrl) let descr = matchstr(str, g:vimwiki_rxWikiLinkMatchDescr) diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt index 3de415b..1c84df9 100644 --- a/doc/vimwiki.txt +++ b/doc/vimwiki.txt @@ -2242,7 +2242,7 @@ similar to 'local:' and 'file:' schemes, but are always opened with Vim: > \ ', subdir='.subdir.', lnk='.lnk.', ext='.ext.', url='.url. \ ', anchor='.anchor endif - if url == '' + if path == '' echom 'Vimwiki Error: Unable to resolve link!' return 0 else diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim index c7d82ea..27399fd 100644 --- a/ftplugin/vimwiki.vim +++ b/ftplugin/vimwiki.vim @@ -100,7 +100,8 @@ function! Complete_wikifiles(findstart, base) " we look for anchors in the given wikifile let segments = split(a:base, '#', 1) - let link_infos = vimwiki#base#resolve_scheme(segments[0].'#', 0) + let given_wikifile = segments[0]=='' ? expand('%:t:r') : segments[0] + let link_infos = vimwiki#base#resolve_scheme(given_wikifile.'#', 0) let wikifile = link_infos[6] let syntax = VimwikiGet('syntax', link_infos[0]) let anchors = vimwiki#base#get_anchors(wikifile, syntax)