From: Ciro Santilli Date: Tue, 8 Jul 2014 06:52:52 +0000 (+0200) Subject: Merge pull request #89 from cirosantilli/table-format X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/2b4603e9eaac622ee963c45b3a838e36bd7b7b1f?hp=55698854abe296deb5b698e9d2d1c2a92549aa77 Merge pull request #89 from cirosantilli/table-format Add TableFormat command. --- diff --git a/README.md b/README.md index 20a74e3..18044db 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,12 @@ Syntax highlighting, matching rules and mappings for [the original Markdown](htt If you use [Vundle](https://github.com/gmarik/vundle), add the following line to your `~/.vimrc`: + Plugin 'godlygeek/tabular' Plugin 'plasticboy/vim-markdown' -And then run inside Vim: +The `tabular` plugin come *before* `vim-markdown`. + +Then run inside Vim: :so ~/.vimrc :PluginInstall @@ -69,13 +72,17 @@ The following work on normal and visual modes: ## Commands -- `:Toc`: create a quickfix vertical window navigable table of contents with the headers. +- `:HeaderDecrease`: - Hit `` on a line to jump to the corresponding line of the markdown file. + Decrease level of all headers in buffer: `h2` to `h1`, `h3` to `h2`, etc. -- `: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`. + If range is given, only operate in the range. + + If an `h1` would be decreased, abort. + + For simplicity of implementation, Setex headers are converted to Atx. + +- `:HeaderIncrease`: Analogous to `:HeaderDecrease`, but increase levels instead. - `:SetexToAtx`: @@ -83,17 +90,22 @@ The following work on normal and visual modes: If a range is given, e.g. hit `:` from visual mode, only operate on the range. -- `:HeaderDecrease`: +- `:TableFormat`: Format the table under the cursor [like this](http://www.cirosantilli.com/markdown-styleguide/#tables). - Decrease level of all headers in buffer: `h2` to `h1`, `h3` to `h2`, etc. + Requires [Tabular](https://github.com/godlygeek/tabular). - If range is given, only operate in the range. + The input table *must* already have a separator line as the second line of the table. + That line only needs to contain the correct pipes `|`, nothing else is required. - If an `h1` would be decreased, abort. +- `:Toc`: create a quickfix vertical window navigable table of contents with the headers. - For simplicity of implementation, Setex headers are converted to Atx. + Hit `` on a line to jump to the corresponding line of the markdown file. -- `:HeaderIncrease`: Analogous to `:HeaderDecrease`, but increase levels instead. +- `: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 2129203..36d0b08 100644 --- a/ftplugin/mkd.vim +++ b/ftplugin/mkd.vim @@ -396,6 +396,22 @@ function! s:HeaderDecrease(line1, line2, ...) endfor endfunction +" Format table under cursor. +" Depends on Tabularize. +function! s:TableFormat() + let l:pos = getpos('.') + normal! { + " Search instead of `normal! j` because of the table at beginning of file edge case. + call search('|') + normal! j + " Remove everything that is not a pipe othewise well formated tables would grow + " because of addition of 2 spaces on the separator line by Tabularize /|. + s/[^|]//g + Tabularize /| + s/ /-/g + call setpos('.', l:pos) +endfunction + call MapNormVis('(Markdown_MoveToNextHeader)', 'Markdown_MoveToNextHeader') call MapNormVis('(Markdown_MoveToPreviousHeader)', 'Markdown_MoveToPreviousHeader') call MapNormVis('(Markdown_MoveToNextSiblingHeader)', 'Markdown_MoveToNextSiblingHeader') @@ -421,10 +437,11 @@ if !get(g:, 'vim_markdown_no_default_key_mappings', 0) vmap ]c (Markdown_MoveToCurHeader) endif +command! -buffer -range=% HeaderDecrease call s:HeaderDecrease(, ) +command! -buffer -range=% HeaderIncrease call s:HeaderDecrease(, , 1) +command! -buffer -range=% SetexToAtx call s:SetexToAtx(, ) +command! -buffer TableFormat call s:TableFormat() command! -buffer Toc call s:Markdown_Toc() command! -buffer Toch call s:Markdown_Toc('horizontal') command! -buffer Tocv call s:Markdown_Toc('vertical') command! -buffer Toct call s:Markdown_Toc('tab') -command! -buffer -range=% SetexToAtx call s:SetexToAtx(, ) -command! -buffer -range=% HeaderDecrease call s:HeaderDecrease(, ) -command! -buffer -range=% HeaderIncrease call s:HeaderDecrease(, , 1) diff --git a/test/table_format.md b/test/table_format.md new file mode 100644 index 0000000..3b617f0 --- /dev/null +++ b/test/table_format.md @@ -0,0 +1,17 @@ +| normal |no space| 2 spaces || +| - |-| --- || +| normal |no space| 2 spaces || + +The table above is the first thing in the file. + +The following table is already well formatted. It should not be modified: + +| a | b | +|---|---| +| c | d | + +The following table is the last thing in the file: + +| normal |no space| 2 spaces || +| - |-| --- || +| normal |no space| 2 spaces ||