diff options
| author | Robert Günzler <r@gnzler.io> | 2022-02-08 23:59:36 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2022-02-08 23:59:36 +0100 |
| commit | 132666c6cd258a81eba61ccbe29cdd2d9e85c8d7 (patch) | |
| tree | 003cde3a39fdea6e22cc3463e8779b3934f8255a /.vim/lua | |
| parent | db7d5dc5123d9aed20bb0c04838b1077fb5dce2d (diff) | |
vim: add foldblock helper
Diffstat (limited to '.vim/lua')
| -rw-r--r-- | .vim/lua/misc.lua | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/.vim/lua/misc.lua b/.vim/lua/misc.lua index 31663a9..14d5d7a 100644 --- a/.vim/lua/misc.lua +++ b/.vim/lua/misc.lua @@ -46,12 +46,12 @@ function M.open_under_cursor(cmd, detect_cmd) end) end -function get_visual_selection() - pos1 = vim.fn.getpos("'<") - ln1, col1 = pos1[2], pos1[3] - pos2 = vim.fn.getpos("'>") - ln2, col2 = pos2[2], pos2[3] - lines = vim.fn.getline(ln1, ln2) +local function get_visual_selection() + local pos1 = vim.fn.getpos("'<") + local ln1, col1 = pos1[2], pos1[3] + local pos2 = vim.fn.getpos("'>") + local ln2, col2 = pos2[2], pos2[3] + local lines = vim.fn.getline(ln1, ln2) if vim.opt.selection:get() == 'inclusive' then lines[#lines] = lines[#lines]:sub(1,col2) else @@ -63,7 +63,7 @@ end function M.sort_line() local fn = vim.fn - pos1, pos2, lines = get_visual_selection() + local pos1, _, lines = get_visual_selection() for i=1, #lines do local ln = pos1[2] + (i-1) local line = fn.join(fn.sort(fn.split(lines[i], " "))) @@ -90,6 +90,30 @@ function M.find_files(dirs) } end +function M.fold_block() -- {{{ + local Comment = require('Comment.api') + local m = vim.api.nvim_buf_get_mark + local inital_cusor_pos = vim.api.nvim_win_get_cursor(0) + local spos, epos = m(0, '<'), m(0, '>') + + -- do start of selection + vim.api.nvim_win_set_cursor(0, spos) + Comment.insert_linewise_eol() + vim.api.nvim_feedkeys('\\<esc>', 'ni', true) + local sln = vim.api.nvim_get_current_line() + vim.api.nvim_set_current_line(sln .. '{{{') + + -- do end of selection + vim.api.nvim_win_set_cursor(0, epos) + Comment.insert_linewise_eol() + vim.api.nvim_feedkeys('\\<esc>', 'ni', true) + local eln = vim.api.nvim_get_current_line() + vim.api.nvim_set_current_line(eln .. '}}}') + + -- restore initial cursor postition + vim.api.nvim_win_set_cursor(0, inital_cusor_pos) +end -- }}} + local function render_link_preview(buf, ln, link) local j = require('plenary.job'):new({ command = vim.env.SHELL, |