From 92bf71ac7773588fbb7460479054d43c121ee7f5 Mon Sep 17 00:00:00 2001 From: jdhao Date: Thu, 12 Nov 2020 21:56:44 +0800 Subject: Add text objects for Markdown fenced code blocks. --- autoload/text_obj.vim | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'autoload') 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! `' +endfunction -- cgit v1.2.3