-- misc stuff implemented in lua local M = {} function M.do_under_cursor(obj, cb) return cb(vim.fn.expand(vim.fn.expand(obj))) end function M.word_under_cursor(cb) return M.do_under_cursor('', cb) end function M.expr_under_cursor(cb) return M.do_under_cursor('', cb) end function M.file_under_cursor(cb) return M.do_under_cursor('', cb) end function M.open_under_cursor(cmd) return M.file_under_cursor(function(txt) if not cmd then vim.fn.inputsave() cmd = vim.fn.input('open with: ') vim.fn.inputrestore() end if cmd then c = vim.loop.spawn(cmd, { args = {txt} }, function() c:close() end) end 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) if vim.opt.selection:get() == 'inclusive' then lines[#lines] = lines[#lines]:sub(1,col2) else lines[#lines] = lines[#lines]:sub(1,col2-1) end lines[1] = lines[1]:sub(col1) return pos1, pos2, lines end function M.sort_line() local fn = vim.fn pos1, pos2, 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], " "))) line = fn.substitute(fn.getline(ln), lines[i], line, "") vim.fn.setline(ln, line) end end function M.live_grep(dirs) dirs = dirs or vim.fn.input('Dirs: ') require('telescope.builtin').live_grep {search_dirs=vim.split(dirs, ',')} end function M.find_files(dirs) dirs = dirs or vim.fn.input('Dirs: ') require('telescope.builtin').find_files {search_dirs=vim.split(dirs, ',')} end return M