X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/3375792916db2503b81ee848eeb26c7376d23e42..8f67b23f0993155097f87b3f9a7866029ccb72cf:/ftplugin/markdown.vim diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 48fa89e..68d1d3d 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -578,28 +578,62 @@ endfunction " 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_markdown_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) @@ -746,10 +780,10 @@ function! s:MarkdownClearSyntaxVariables() 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! * + autocmd BufWinEnter call s:MarkdownRefreshSyntax(1) + autocmd BufUnload call s:MarkdownClearSyntaxVariables() + autocmd BufWritePost call s:MarkdownRefreshSyntax(0) + autocmd InsertEnter,InsertLeave call s:MarkdownRefreshSyntax(0) + autocmd CursorHold,CursorHoldI call s:MarkdownRefreshSyntax(0) augroup END