From: Ciro Santilli 六四事件 法轮功 Date: Mon, 4 May 2015 14:24:39 +0000 (+0200) Subject: Merge pull request #193 from cirosantilli/toc X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/df9dab8972c83f198aa05e166acd46e59ec4bd80?hp=7699a752ecdff53ffce1e8bf667caa60d92a42c0 Merge pull request #193 from cirosantilli/toc Add TOC to README --- diff --git a/README.md b/README.md index 2ba5429..fc3052a 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,14 @@ The following work on normal and visual modes: - `]u`: go to parent header (Up). `Markdown_MoveToParentHeader` +This plugging follows the recommended Vim plugin mapping interface, so if you want to change the map `]u` to `asdf`, add to your `.vimrc`: + + map asdf Markdown_MoveToParentHeader + +To disable a map, use: + + map Markdown_MoveToParentHeader + ## Commands - `:HeaderDecrease`: diff --git a/ftplugin/mkd.vim b/ftplugin/mkd.vim index 05316ab..d67864a 100644 --- a/ftplugin/mkd.vim +++ b/ftplugin/mkd.vim @@ -464,14 +464,12 @@ endfunction " - a string with the the URL for the link under the cursor " - an empty string if the cursor is not on a link " -" `b:` instead of `s:` to make it testable. -" " TODO " " - multiline support " - give an error if the separator does is not on a link " -function! b:Markdown_GetUrlForPosition(lnum, col) +function! s:Markdown_GetUrlForPosition(lnum, col) let l:lnum = a:lnum let l:col = a:col let l:syn = synIDattr(synID(l:lnum, l:col, 1), 'name') @@ -504,7 +502,7 @@ endfunction " Front end for GetUrlForPosition. " function! s:OpenUrlUnderCursor() - let l:url = b:Markdown_GetUrlForPosition(line('.'), col('.')) + let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.')) if l:url != '' call netrw#NetrwBrowseX(l:url, 0) else @@ -512,6 +510,13 @@ function! s:OpenUrlUnderCursor() endif endfunction +function! s:MapNotHasmapto(lhs, rhs) + if !hasmapto('' . a:rhs) + execute 'nmap ' . a:lhs . ' ' . a:rhs + execute 'vmap ' . a:lhs . ' ' . a:rhs + endif +endfunction + call MapNormVis('Markdown_MoveToNextHeader', 'MoveToNextHeader') call MapNormVis('Markdown_MoveToPreviousHeader', 'MoveToPreviousHeader') call MapNormVis('Markdown_MoveToNextSiblingHeader', 'MoveToNextSiblingHeader') @@ -521,20 +526,13 @@ call MapNormVis('Markdown_MoveToCurHeader', 'MoveToCurHeader') nnoremap Markdown_OpenUrlUnderCursor :call OpenUrlUnderCursor() if !get(g:, 'vim_markdown_no_default_key_mappings', 0) - nmap ]] Markdown_MoveToNextHeader - nmap [[ Markdown_MoveToPreviousHeader - nmap ][ Markdown_MoveToNextSiblingHeader - nmap [] Markdown_MoveToPreviousSiblingHeader - nmap ]u Markdown_MoveToParentHeader - nmap ]c Markdown_MoveToCurHeader - nmap gx Markdown_OpenUrlUnderCursor - - vmap ]] Markdown_MoveToNextHeader - vmap [[ Markdown_MoveToPreviousHeader - vmap ][ Markdown_MoveToNextSiblingHeader - vmap [] Markdown_MoveToPreviousSiblingHeader - vmap ]u Markdown_MoveToParentHeader - vmap ]c Markdown_MoveToCurHeader + call MapNotHasmapto(']]', 'Markdown_MoveToNextHeader') + call MapNotHasmapto('[[', 'Markdown_MoveToPreviousHeader') + call MapNotHasmapto('][', 'Markdown_MoveToNextSiblingHeader') + call MapNotHasmapto('[]', 'Markdown_MoveToPreviousSiblingHeader') + call MapNotHasmapto(']u', 'Markdown_MoveToParentHeader') + call MapNotHasmapto(']c', 'Markdown_MoveToCurHeader') + call MapNotHasmapto('gx', 'Markdown_OpenUrlUnderCursor') endif command! -buffer -range=% HeaderDecrease call s:HeaderDecrease(, ) diff --git a/test/map.vader b/test/map.vader index 51bde78..ea96182 100644 --- a/test/map.vader +++ b/test/map.vader @@ -4,11 +4,12 @@ a c Execute (gx autolink): let b:url = 'http://b' let b:line = getline(1) - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'a') + 1), '' - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, '<') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'h') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, '>') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'c') + 1), '' + let b:func = Markdown_GetFunc('vim-markdown/ftplugin/mkd.vim', 'Markdown_GetUrlForPosition') + AssertEqual b:func(1, match(b:line, 'a') + 1), '' + AssertEqual b:func(1, match(b:line, '<') + 1), b:url + AssertEqual b:func(1, match(b:line, 'h') + 1), b:url + AssertEqual b:func(1, match(b:line, '>') + 1), b:url + AssertEqual b:func(1, match(b:line, 'c') + 1), '' Given mkd; a http://b.bb c @@ -16,9 +17,10 @@ a http://b.bb c Execute (gx implicit autolink): let b:url = 'http://b.bb' let b:line = getline(1) - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'a') + 1), '' - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'h') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'c') + 1), '' + let b:func = Markdown_GetFunc('vim-markdown/ftplugin/mkd.vim', 'Markdown_GetUrlForPosition') + AssertEqual b:func(1, match(b:line, 'a') + 1), '' + AssertEqual b:func(1, match(b:line, 'h') + 1), b:url + AssertEqual b:func(1, match(b:line, 'c') + 1), '' Given mkd; [a]: http://b "c" @@ -26,10 +28,11 @@ Given mkd; Execute (gx link reference definition): let b:url = 'http://b' let b:line = getline(1) + let b:func = Markdown_GetFunc('vim-markdown/ftplugin/mkd.vim', 'Markdown_GetUrlForPosition') " TODO would be cool if all of the following gave the link. - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'a') + 1), '' - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'h') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'c') + 1), '' + AssertEqual b:func(1, match(b:line, 'a') + 1), '' + AssertEqual b:func(1, match(b:line, 'h') + 1), b:url + AssertEqual b:func(1, match(b:line, 'c') + 1), '' Given mkd; a [b](c) d @@ -37,14 +40,15 @@ a [b](c) d Execute (gx autolink): let b:url = 'c' let b:line = getline(1) - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'a') + 1), '' - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, '[') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'b') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, ']') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, '(') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'c') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, ')') + 1), b:url - AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'd') + 1), '' + let b:func = Markdown_GetFunc('vim-markdown/ftplugin/mkd.vim', 'Markdown_GetUrlForPosition') + AssertEqual b:func(1, match(b:line, 'a') + 1), '' + AssertEqual b:func(1, match(b:line, '[') + 1), b:url + AssertEqual b:func(1, match(b:line, 'b') + 1), b:url + AssertEqual b:func(1, match(b:line, ']') + 1), b:url + AssertEqual b:func(1, match(b:line, '(') + 1), b:url + AssertEqual b:func(1, match(b:line, 'c') + 1), b:url + AssertEqual b:func(1, match(b:line, ')') + 1), b:url + AssertEqual b:func(1, match(b:line, 'd') + 1), '' Given mkd; # a diff --git a/test/vimrc b/test/vimrc index 86020ed..44df1b6 100644 --- a/test/vimrc +++ b/test/vimrc @@ -6,3 +6,19 @@ filetype on filetype plugin on filetype indent on syntax on + +function! Markdown_GetScriptID(fname) abort + let a:snlist = '' + redir => a:snlist + silent! scriptnames + redir END + let a:mx = '^\s*\(\d\+\):\s*\(.*\)$' + for a:line in split(a:snlist, "\n") + if stridx(a:line, a:fname) >= 0 + return substitute(a:line, a:mx, '\1', '') + endif + endfor +endfunction +function! Markdown_GetFunc(fname, funcname) abort + return function('' . Markdown_GetScriptID(a:fname) . '_' . a:funcname) +endfunction