Files
dotfiles/.vscode/extensions/asvetliakov.vscode-neovim-1.18.24/runtime/vscode/inccommand.lua
2025-12-15 12:50:23 -05:00

57 lines
1.3 KiB
Lua

-- Support preview list when inccommand is set to split. Mainly for 'substitute'
local api, fn = vim.api, vim.fn
local function get_lines()
-- Find preview buffer --
local preview_buf
local bufs = api.nvim_list_bufs()
for _, buf in ipairs(bufs) do
if
vim.bo[buf].buftype == "nofile"
and fn.bufname(buf) == "[Preview]"
and fn.getbufoneline(buf, 1):match("%d+|")
then
preview_buf = buf
break
end
end
-- return items --
if not preview_buf then
return
end
return api.nvim_buf_get_lines(preview_buf, 0, -1, false)
end
local re = vim.regex([[\(s\|su\|substitute\)/.]])
local function refresh_completion()
if
not vim.g.vscode_channel
or vim.opt.icm:get() ~= "split"
or fn.getcmdtype() ~= ":"
or not re:match_str(fn.getcmdline())
then
return
end
local lines = get_lines()
if lines then
local items = {}
for _, line in ipairs(lines) do
table.insert(items, { line, "", "", "" })
end
vim.rpcnotify(vim.g.vscode_channel, "redraw", { "popupmenu_show", { items, -1, 0, 0, -1 } })
end
end
api.nvim_create_autocmd({ "CmdlineChanged" }, {
group = api.nvim_create_augroup("vscode.inccommand", {}),
callback = function()
vim.schedule(refresh_completion)
end,
})