diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-06-10 23:07:28 +0200 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-06-10 23:07:28 +0200 |
commit | 511efe89ed084bc922ae142d32e08427859198f4 (patch) | |
tree | fef9294b6056b6cf972ea5e689f70da8184fafae /.config/nvim/lua/pipe.lua | |
parent | 64e2e90abdca04743558e3baf42a6b714b440bd0 (diff) |
nvim: Completely rewrite my configuration
Diffstat (limited to '.config/nvim/lua/pipe.lua')
-rw-r--r-- | .config/nvim/lua/pipe.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/.config/nvim/lua/pipe.lua b/.config/nvim/lua/pipe.lua new file mode 100644 index 0000000..f09a030 --- /dev/null +++ b/.config/nvim/lua/pipe.lua @@ -0,0 +1,42 @@ +function pipe_visual() + pipe_internal({'<', '>'}, vim.fn.visualmode() ~= 'v') +end + +function pipe_normal(arg) + pipe_internal({'[', ']'}, arg == 'line') +end + +function pipe_internal(marks, linesp) + local mode = vim.fn.visualmode() + + local sr, sc = unpack(vim.api.nvim_buf_get_mark(0, marks[1])) + local er, ec = unpack(vim.api.nvim_buf_get_mark(0, marks[2])) + + local lines = linesp + and vim.api.nvim_buf_get_lines(0, sr - 1, er, true) + or vim.api.nvim_buf_get_text(0, sr - 1, sc, er - 1, ec + 1, {}) + + local ok, cmd = pcall(vim.fn.input, { + prompt = '… | ', + cancelreturn = vim.NIL, + }) + + if not ok or cmd == vim.NIL then + return + end + + local out = vim.fn.systemlist(cmd, lines) + if linesp then + vim.api.nvim_buf_set_lines(0, sr - 1, er, true, out) + else + vim.api.nvim_buf_set_text(0, sr - 1, sc, er - 1, ec + 1, out) + end +end + +vim.keymap.set('n', '<Plug>PipeNormal', ':set opfunc=v:lua.pipe_normal<CR>g@', + { silent = true }) +vim.keymap.set('x', '<Plug>PipeVisual', ':<C-u>lua pipe_visual()<CR>', + { silent = true }) + +vim.keymap.set('n', '|', '<Plug>PipeNormal') +vim.keymap.set('x', '|', '<Plug>PipeVisual') |