" We need a definition guard because we invoke 'edit' which will reload this
" script while this function is running. We must not replace it.
-if !exists("*s:EditUrlUnderCursor")
- function s:EditUrlUnderCursor()
- let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.'))
- if l:url != ''
- if get(g:, 'vim_markdown_autowrite', 0)
- write
- endif
- if get(g:, 'vim_markdown_no_extensions_in_markdown', 0)
- " use another file extension if preferred
- if exists('g:vim_markdown_auto_extension_ext')
- let l:ext = '.'.g:vim_markdow_auto_extension_ext
- else
- let l:ext = '.md'
- endif
- execute 'edit' fnameescape(fnamemodify(expand('%:~'), ':p:h').'/'.l:url.l:ext)
- else
- execute 'edit' fnameescape(l:url)
- endif
- else
- echomsg 'The cursor is not on a link.'
- endif
- endfunction
+if !exists('*s:EditUrlUnderCursor')
+ function s:EditUrlUnderCursor()
+ let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.'))
+ if l:url != ''
+ if get(g:, 'vim_markdown_autowrite', 0)
+ write
+ endif
+ let l:anchor = ''
+ if get(g:, 'vim_markdown_follow_anchor', 0)
+ let l:parts = split(l:url, '#', 1)
+ if len(l:parts) == 2
+ let [l:url, l:anchor] = parts
+ let l:anchorexpr = get(g:, 'vim_markdown_anchorexpr', '')
+ if l:anchorexpr != ''
+ let l:anchor = eval(substitute(
+ \ l:anchorexpr, 'v:anchor',
+ \ escape('"'.l:anchor.'"', '"'), ''))
+ endif
+ endif
+ endif
+ if l:url != ''
+ let l:ext = ''
+ if get(g:, 'vim_markdown_no_extensions_in_markdown', 0)
+ " use another file extension if preferred
+ if exists('g:vim_markdown_auto_extension_ext')
+ let l:ext = '.'.g:vim_markdown_auto_extension_ext
+ else
+ let l:ext = '.md'
+ endif
+ endif
+ let l:url = fnameescape(fnamemodify(expand('%:h').'/'.l:url.l:ext, ':.'))
+ let l:editmethod = ''
+ " determine how to open the linked file (split, tab, etc)
+ if exists('g:vim_markdown_edit_url_in')
+ if g:vim_markdown_edit_url_in == 'tab'
+ let l:editmethod = 'tabnew'
+ elseif g:vim_markdown_edit_url_in == 'vsplit'
+ let l:editmethod = 'vsp'
+ elseif g:vim_markdown_edit_url_in == 'hsplit'
+ let l:editmethod = 'sp'
+ else
+ let l:editmethod = 'edit'
+ endif
+ else
+ " default to current buffer
+ let l:editmethod = 'edit'
+ endif
+ execute l:editmethod l:url
+ endif
+ if l:anchor != ''
+ silent! execute '/'.l:anchor
+ endif
+ else
+ echomsg 'The cursor is not on a link.'
+ endif
+ endfunction
endif
function! s:VersionAwareNetrwBrowseX(url)
endfunction
augroup Mkd
- autocmd!
- au BufWinEnter * call s:MarkdownRefreshSyntax(1)
- au BufUnload * call s:MarkdownClearSyntaxVariables()
- au BufWritePost * call s:MarkdownRefreshSyntax(0)
- au InsertEnter,InsertLeave * call s:MarkdownRefreshSyntax(0)
- au CursorHold,CursorHoldI * call s:MarkdownRefreshSyntax(0)
+ autocmd! * <buffer>
+ autocmd BufWinEnter <buffer> call s:MarkdownRefreshSyntax(1)
+ autocmd BufUnload <buffer> call s:MarkdownClearSyntaxVariables()
+ autocmd BufWritePost <buffer> call s:MarkdownRefreshSyntax(0)
+ autocmd InsertEnter,InsertLeave <buffer> call s:MarkdownRefreshSyntax(0)
+ autocmd CursorHold,CursorHoldI <buffer> call s:MarkdownRefreshSyntax(0)
augroup END