nvim/lua/fuzzy/jump.lua (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
local fn = vim.fn
local cmd = vim.cmd
local M = {}
local function get_line_nr(s)
for c in s:gmatch('%d+%s') do
c = string.gsub(c, '%s', '')
return tonumber(c)
end
end
local function annotated_input()
local lines = {}
-- index each line in the current buffer
-- for jumping to
--
for nr = 1, fn.line('$') do
table.insert(lines, fn.getline(nr))
end
local outfile = fn.tempname()
local f = io.open(outfile, 'a')
for n, l in pairs(lines) do
f:write(n .. '\t' .. l, '\n')
end
f:close()
return outfile, lines
end
function M.fzy_jmp()
local idxfile, lines = annotated_input()
fzy_cmd = {
'fzy -p "jmp > " ',
'< ' .. idxfile,
}
require('fzy/fzy').fzy_search(table.concat(fzy_cmd), function(stdout)
-- strip '\n'
local selected, _ = stdout:gsub('\n', '')
cmd('bd!')
-- jump to line
cmd(':' .. get_line_nr(selected))
-- housekeeping
os.remove(idxfile)
end
)
end
return M
|