all repos — dotfiles @ 0a867ad2e58c21d31f0ce106ab5812a152c6b83f

my *nix dotfiles

nvim/lua/fuzzy/jump.lua (view raw)

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