aboutsummaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorjdhao <jdhao@hotmail.com>2020-11-12 21:56:44 +0800
committerjdhao <jdhao@hotmail.com>2020-11-12 21:56:44 +0800
commit92bf71ac7773588fbb7460479054d43c121ee7f5 (patch)
tree6b2376e69ffebe743a30e74bdb31e0a2498eeb87 /autoload
parentf68fa62e864b1293d74bc23e4fe7b54746203370 (diff)
Add text objects for Markdown fenced code blocks.
Diffstat (limited to 'autoload')
-rw-r--r--autoload/text_obj.vim24
1 files changed, 24 insertions, 0 deletions
diff --git a/autoload/text_obj.vim b/autoload/text_obj.vim
index ba7c808..58ba710 100644
--- a/autoload/text_obj.vim
+++ b/autoload/text_obj.vim
@@ -52,3 +52,27 @@ function! text_obj#URL() abort
call setpos("'>", [buf_num, cur_row, end_col, 0])
normal! gv
endfunction
+
+function! text_obj#MdCodeBlock(type) abort
+ " the parameter type specify whether it is inner text objects or arround
+ " text objects.
+
+ " Move the cursor to the end of line in case that cursor is on the openning
+ " of a code block. Actually, there are still issues if the cursor is on the
+ " closing of a code block. In this case, the start row of code blocks would
+ " be wrong. Unless we can match code blocks, it not easy to fix this.
+ normal! $
+ let start_row = searchpos('\s*```', 'bnW')[0]
+ let end_row = searchpos('\s*```', 'nW')[0]
+
+ let buf_num = bufnr()
+ if a:type ==# 'i'
+ let start_row += 1
+ let end_row -= 1
+ endif
+ " echo a:type start_row end_row
+
+ call setpos("'<", [buf_num, start_row, 1, 0])
+ call setpos("'>", [buf_num, end_row, 1, 0])
+ execute 'normal! `<V`>'
+endfunction