]> 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 #95 from cassava/patch-1
authorHiroshi Shirosaki <h.shirosaki@gmail.com>
Fri, 20 Jun 2014 11:45:09 +0000 (20:45 +0900)
committerHiroshi Shirosaki <h.shirosaki@gmail.com>
Fri, 20 Jun 2014 11:45:09 +0000 (20:45 +0900)
Changing Vundle "Bundle" references to "Plugin"

README.md
ftplugin/mkd.vim

index dd673096f26a673f8e2d7cf81485236d32a433b4..20a74e3806b319d7b2745c1edd9ae582c61e49f7 100644 (file)
--- a/README.md
+++ b/README.md
@@ -77,6 +77,24 @@ The following work on normal and visual modes:
 - `:Toct`: Same as `:Toc` but in a new tab.
 - `:Tocv`: Same as `:Toc` for symmetry with `:Toch` and `Tocv`.
 
+- `:SetexToAtx`:
+
+    Convert all Setex style headers in buffer to Atx.
+
+    If a range is given, e.g. hit `:` from visual mode, only operate on the range.
+
+- `:HeaderDecrease`:
+
+    Decrease level of all headers in buffer: `h2` to `h1`, `h3` to `h2`, etc.
+
+    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.
+
 ## Credits
 
 The main contributors of vim-markdown are:
index ee861e7dc2ea4921e2eb8de2c9a33714d56e1997..21292030079543fc33f55e0f5bdf5158bd426f61 100644 (file)
@@ -358,6 +358,43 @@ function! s:MapNormVis(rhs,lhs)
     execute 'vn <buffer><silent> ' . a:rhs . ' <esc>:call <sid>VisMove(''' . a:lhs . ''')<cr>'
 endfunction
 
+" Convert Setex headers in range `line1 .. line2` to Atx.
+" Returns the number of conversions.
+function! s:SetexToAtx(line1, line2)
+    let l:originalNumLines = line('$')
+    execute 'silent! ' . a:line1 . ',' . a:line2 . 'substitute/\v(.*\S.*)\n\=+$/# \1/'
+    execute 'silent! ' . a:line1 . ',' . a:line2 . 'substitute/\v(.*\S.*)\n-+$/## \1/'
+    return l:originalNumLines - line('$')
+endfunction
+
+" If `a:1` is 0, decrease the level of all headers in range `line1 .. line2`.
+" Otherwise, increase the level. `a:1` defaults to `0`.
+function! s:HeaderDecrease(line1, line2, ...)
+    if a:0 > 0
+        let l:increase = a:1
+    else
+        let l:increase = 0
+    endif
+    if l:increase
+        let l:forbiddenLevel = 6
+        let l:replaceLevels = [5, 1]
+        let l:levelDelta = 1
+    else
+        let l:forbiddenLevel = 1
+        let l:replaceLevels = [2, 6]
+        let l:levelDelta = -1
+    endif
+    for l:line in range(a:line1, a:line2)
+        if join(getline(l:line, l:line + 1), "\n") =~ s:levelRegexpDict[l:forbiddenLevel]
+            echomsg 'There is an h' . l:forbiddenLevel . ' at line ' . l:line . '. Aborting.'
+            return
+        endif
+    endfor
+    let l:numSubstitutions = s:SetexToAtx(a:line1, a:line2)
+    for l:level in range(replaceLevels[0], replaceLevels[1], -l:levelDelta)
+        execute 'silent! ' . a:line1 . ',' . (a:line2 - l:numSubstitutions) . 'substitute/' . s:levelRegexpDict[l:level] . '/' . repeat('#', l:level + l:levelDelta) . '\1/g'
+    endfor
+endfunction
 
 call <sid>MapNormVis('<Plug>(Markdown_MoveToNextHeader)', '<sid>Markdown_MoveToNextHeader')
 call <sid>MapNormVis('<Plug>(Markdown_MoveToPreviousHeader)', '<sid>Markdown_MoveToPreviousHeader')
@@ -388,3 +425,6 @@ 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)