From: Ciro Santilli Date: Wed, 23 Apr 2014 12:22:45 +0000 (+0200) Subject: Merge pull request #70 from beyondwdq/master X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/71f171736fb549352c04e19e27632a230964dce2?hp=5cd2223d4eec545745f729142197e839135cce94 Merge pull request #70 from beyondwdq/master Disable automatically inserting bullets when auto-wrapping. --- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d6716ce..c51d65b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,20 +30,12 @@ There are many flavors of markdown, each one with an unique feature set. This pl # Tests -All new features must have tests. While we don't require unit tests, which are too hard to do in certain cases, you should create a test under the `test/` directory with a predictable name which allows other users to quickly test your feature. Good tests should explain their expected input / output behavior. Failing test should be marked with `FAIL` somewhere near the test, possibly explaining why it fails. For example: +All new features must have tests. We don't require unit tests: tests that require users to open markdown code in Vim and check things manually are accepted, but you should point clearly to where the tests are. -``` -## Links +Wherever possible, use test cases from the [karlcow'w Markdown Test Suite](https://github.com/karlcow/markdown-testsuite), and link to the relevant test files on your merge request. -[Link text](link URL) +If a test does not exist there yet, make a pull request to them, and link to that pull request on the pull request you make here. -... more correct link tests ... +If the test you want to do is not appropriate for the Markdown Test Suite, create it only under the `test/` directory here. -###### FAIL: should not be highlighted as a link - -Text (with parenthesis) alone should not be highlighted as a link. (Issue #57) - -... more failed link tests ... - -## Code Blocks -``` +If we start disagreeing too often on what is appropriate or not, we will fork off that repository. diff --git a/README.md b/README.md index 9478b5a..24c5c6c 100644 --- a/README.md +++ b/README.md @@ -48,16 +48,36 @@ Add the following line to your `.vimrc` to set the initial foldlevel. This optio let g:vim_markdown_initial_foldlevel=1 ``` +**Disable Default Key Mappings** + +Add the following line to your `.vimrc` to disable default key mappings. You can map them by yourself with `` mappings. + +```vim +let g:vim_markdown_no_default_key_mappings=1 +``` + ## Mappings The following work on normal and visual modes: -- `]]`: go to next header. -- `[[`: go to previous header. Contrast with `]c`. -- `][`: go to next sibling header if any. -- `[]`: go to previous sibling header if any. -- `]c`: go to Current header. -- `]u`: go to parent header (Up). +- `]]`: go to next header. `(Markdown_MoveToNextHeader)` +- `[[`: go to previous header. Contrast with `]c`. `(Markdown_MoveToPreviousHeader)` +- `][`: go to next sibling header if any. `(Markdown_MoveToNextSiblingHeader)` +- `[]`: go to previous sibling header if any. `(Markdown_MoveToPreviousSiblingHeader)` +- `]c`: go to Current header. `(Markdown_MoveToCurHeader)` +- `]u`: go to parent header (Up). `(Markdown_MoveToParentHeader)` + +## Commands + +The following commands currently only work for atx style headers (`#`). Pull request are welcome to extend them to Setext style headers (`===`). + +- `:Toc`: create a quickfix vertical window navigable table of contents with the headers. + + Hit `` on a line to jump to the corresponding line of the markdown file. + +- `:Toch`: Same as `:Toc` but in an horizontal window. +- `:Toct`: Same as `:Toc` but in a new tab. +- `:Tocv`: Same as `:Toc` for symmetry with `:Toch` and `Tocv`. ## Credits diff --git a/ftplugin/mkd.vim b/ftplugin/mkd.vim index 4e9f448..07f81db 100644 --- a/ftplugin/mkd.vim +++ b/ftplugin/mkd.vim @@ -294,6 +294,39 @@ function! b:Markdown_MoveToPreviousSiblingHeader() endif endfunction +function! b:Markdown_Toc(...) + if a:0 > 0 + let l:window_type = a:1 + else + let l:window_type = 'vertical' + endif + silent vimgrep '^#' % + if l:window_type ==# 'horizontal' + copen + elseif l:window_type ==# 'vertical' + vertical copen + let &winwidth=(&columns/2) + elseif l:window_type ==# 'tab' + tab copen + else + copen + endif + set modifiable + %s/\v^([^|]*\|){2,2} #// + for i in range(1, line('$')) + let l:line = getline(i) + let l:header = matchstr(l:line, '^#*') + let l:length = len(l:header) + let l:line = substitute(l:line, '\v^#*[ ]*', '', '') + let l:line = substitute(l:line, '\v[ ]*#*$', '', '') + let l:line = repeat(' ', (2 * l:length)) . l:line + call setline(i, l:line) + endfor + set nomodified + set nomodifiable + normal! gg +endfunction + " Wrapper to do move commands in visual mode. " function! s:VisMove(f) @@ -308,11 +341,34 @@ function! s:MapNormVis(rhs,lhs) execute 'vn ' . a:rhs . ' :call VisMove(''' . a:lhs . ''')' endfunction -call MapNormVis(']]', 'b:Markdown_MoveToNextHeader') -call MapNormVis('[[', 'b:Markdown_MoveToPreviousHeader') -call MapNormVis('][', 'b:Markdown_MoveToNextSiblingHeader') -call MapNormVis('[]', 'b:Markdown_MoveToPreviousSiblingHeader') + +call MapNormVis('(Markdown_MoveToNextHeader)', 'b:Markdown_MoveToNextHeader') +call MapNormVis('(Markdown_MoveToPreviousHeader)', 'b:Markdown_MoveToPreviousHeader') +call MapNormVis('(Markdown_MoveToNextSiblingHeader)', 'b:Markdown_MoveToNextSiblingHeader') +call MapNormVis('(Markdown_MoveToPreviousSiblingHeader)', 'b:Markdown_MoveToPreviousSiblingHeader') " Menmonic: Up -call MapNormVis(']u', 'b:Markdown_MoveToParentHeader') +call MapNormVis('(Markdown_MoveToParentHeader)', 'b:Markdown_MoveToParentHeader') " Menmonic: Current -call MapNormVis(']c', 'b:Markdown_MoveToCurHeader') +call MapNormVis('(Markdown_MoveToCurHeader)', 'b:Markdown_MoveToCurHeader') + +if ! exists('g:vim_markdown_no_default_key_mappings') +\ || !g:vim_markdown_no_default_key_mappings + nmap ]] (Markdown_MoveToNextHeader) + nmap [[ (Markdown_MoveToPreviousHeader) + nmap ][ (Markdown_MoveToNextSiblingHeader) + nmap [] (Markdown_MoveToPreviousSiblingHeader) + nmap ]u (Markdown_MoveToParentHeader) + nmap ]c (Markdown_MoveToCurHeader) + + vmap ]] (Markdown_MoveToNextHeader) + vmap [[ (Markdown_MoveToPreviousHeader) + vmap ][ (Markdown_MoveToNextSiblingHeader) + vmap [] (Markdown_MoveToPreviousSiblingHeader) + vmap ]u (Markdown_MoveToParentHeader) + vmap ]c (Markdown_MoveToCurHeader) +endif + +command! -buffer Toc call b:Markdown_Toc() +command! -buffer Toch call b:Markdown_Toc('horizontal') +command! -buffer Tocv call b:Markdown_Toc('vertical') +command! -buffer Toct call b:Markdown_Toc('tab') diff --git a/test/multiple_headers.md b/test/multiple_headers.md new file mode 100644 index 0000000..b6a403a --- /dev/null +++ b/test/multiple_headers.md @@ -0,0 +1,27 @@ +This file is used for tests which require there to be multiple headers in different relative positions to each other. + +Each header should have an unique text that identifies it. + +# h1 space + +#h1 nospace + +# h1 trailing hash # + +## h2 space + +##h2 nospace + +## h2 trailing hash ## + +### h3 space + +###h3 nospace + +### h3 trailing hash ### + +# h1 before h2 + +## h2 between h1s + +# h1 after h2 diff --git a/test/syntax.md b/test/syntax.md index 9c849e7..22f3b1a 100644 --- a/test/syntax.md +++ b/test/syntax.md @@ -1,145 +1,3 @@ -# Original markdown - -This section covers only features from the [original markdown](daringfireball.net/projects/markdown/syntax), in the same order that they are defined on the specification. - -Extensions will be tested on a separate section. - -## Paragraphs - -Paragraph. - -Line -break. - -## Headers - -The following should be highlighted as headers: - -# h1 - - # h1 - -# h1 # - -h1 -== - -## h2 - -## h2 ## - -h2 --- - -### h3 - -#### h4 - -##### h5 - -###### h6 - -The following is unspecified by Markdown and may not highlight properly: - -####### h7 - -## Blockquotes - -> Block quote - -> First line only -block quote - -> Block quote -> > Block quote level 2 - -> # Markdown inside block quote -> -> [Link text](link-url) - -## Lists - -Only the list marker should be highlighted: - -* 0 -* 1 - -+ 0 -+ 1 - -- 0 -- 1 - -1. 0 -2. 1 - -*Not* lists: - -1 0 - - - 0 - -## Links - -[Link text](link-url) - -Reference style link: [Link text][reference] - -With space: [Link text] [reference] - -[reference]: address -[reference2]: address "Optional Title" - -## Code blocks - -Inline: `inline code` - -Indented: - - indented code block - - # not a header - - - not a list - -Indented code block and lists: - -- 0 - - Paragraph. - - indented code block inside list - -- 0 - - - 1 - - Paragraph (TODO FAIL). - - indented code block inside list - -## Emphasis - -The following should be italicized: - -*single asterisks* - -_single underscores_ - -The following should be boldface: - -**double asterisks** - -__double underscores__ - -# Extensions - -Fenced code blocks TODO add option to turn ON/OFF: - -``` -fenced code block -``` - Fenced code living in an indented environment is correctly highlighted: 1. run this command to do this: