mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 12:20:05 +08:00
60 lines
1.5 KiB
Lua
60 lines
1.5 KiB
Lua
|
local M = {}
|
||
|
local rst = {}
|
||
|
|
||
|
local function get_search_cmd(exe, expr)
|
||
|
if exe == 'grep' then
|
||
|
return {'grep', '-inHR', '--exclude-dir', '.git', expr, '.'}
|
||
|
elseif exe == 'rg' then
|
||
|
return {'rg', '-g!.git', '--hidden', '--no-heading', '--color=never', '--with-filename', '--line-number', expr, '.'}
|
||
|
else
|
||
|
return {exe, expr}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function search_stdout(id, data, event)
|
||
|
for _, d in ipairs(data) do
|
||
|
local info = vim.fn.split(d, [[\:\d\+\:]])
|
||
|
if #info == 2 then
|
||
|
local fname = info[1]
|
||
|
local text = info[2]
|
||
|
local lnum = string.sub(vim.fn.matchstr(d, [[\:\d\+\:]]), 2, -2)
|
||
|
table.insert(rst, {
|
||
|
filename = vim.fn.fnamemodify(fname, ':p'),
|
||
|
lnum = lnum,
|
||
|
text = text
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function search_stderr(id, data, event)
|
||
|
|
||
|
end
|
||
|
|
||
|
local function search_exit(id, data, event)
|
||
|
vim.fn.setqflist({}, 'r', {
|
||
|
title = ' ' .. #rst .. ' items',
|
||
|
items = rst
|
||
|
})
|
||
|
vim.cmd('botright copen')
|
||
|
end
|
||
|
|
||
|
function M.find(expr, exe)
|
||
|
if expr == '' then
|
||
|
expr = vim.fn.input('search expr:')
|
||
|
vim.cmd('noautocmd normal! :')
|
||
|
end
|
||
|
rst = {}
|
||
|
local id = vim.fn.jobstart(get_search_cmd(exe, expr), {
|
||
|
on_stdout = search_stdout,
|
||
|
on_stderr = search_stderr,
|
||
|
on_exit = search_exit,
|
||
|
})
|
||
|
if id > 0 then
|
||
|
vim.api.nvim_echo({{'searching ' .. expr, 'Comment'}}, false, {})
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
return M
|