]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge pull request #89 from cirosantilli/table-format
authorCiro Santilli <ciro.santilli@gmail.com>
Tue, 8 Jul 2014 06:52:52 +0000 (08:52 +0200)
committerCiro Santilli <ciro.santilli@gmail.com>
Tue, 8 Jul 2014 06:52:52 +0000 (08:52 +0200)
Add TableFormat command.

README.md
ftplugin/mkd.vim
test/table_format.md [new file with mode: 0644]

index 20a74e3806b319d7b2745c1edd9ae582c61e49f7..18044db9d042181c4871062592ec5f78936dfefa 100644 (file)
--- 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 `<Enter>` 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 `<Enter>` 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
 
index 21292030079543fc33f55e0f5bdf5158bd426f61..36d0b0816ce3ebdde05c7141afdafa3f59cabc47 100644 (file)
@@ -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 <sid>MapNormVis('<Plug>(Markdown_MoveToNextHeader)', '<sid>Markdown_MoveToNextHeader')
 call <sid>MapNormVis('<Plug>(Markdown_MoveToPreviousHeader)', '<sid>Markdown_MoveToPreviousHeader')
 call <sid>MapNormVis('<Plug>(Markdown_MoveToNextSiblingHeader)', '<sid>Markdown_MoveToNextSiblingHeader')
@@ -421,10 +437,11 @@ if !get(g:, 'vim_markdown_no_default_key_mappings', 0)
     vmap <buffer> ]c <Plug>(Markdown_MoveToCurHeader)
 endif
 
+command! -buffer -range=% HeaderDecrease call s:HeaderDecrease(<line1>, <line2>)
+command! -buffer -range=% HeaderIncrease call s:HeaderDecrease(<line1>, <line2>, 1)
+command! -buffer -range=% SetexToAtx call s:SetexToAtx(<line1>, <line2>)
+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(<line1>, <line2>)
-command! -buffer -range=% HeaderDecrease call s:HeaderDecrease(<line1>, <line2>)
-command! -buffer -range=% HeaderIncrease call s:HeaderDecrease(<line1>, <line2>, 1)
diff --git a/test/table_format.md b/test/table_format.md
new file mode 100644 (file)
index 0000000..3b617f0
--- /dev/null
@@ -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  ||