246 lines
9.7 KiB
Lua
246 lines
9.7 KiB
Lua
-- TODO:
|
|
-- - [ ] remove telescope util
|
|
-- - [ ] better lsp bindings
|
|
|
|
---@type LazyPicker
|
|
local picker = {
|
|
name = "telescope",
|
|
commands = {
|
|
files = "find_files",
|
|
},
|
|
-- this will return a function that calls telescope.
|
|
-- cwd will default to lazyvim.util.get_root
|
|
-- for `files`, git_files or find_files will be chosen depending on .git
|
|
---@param builtin string
|
|
---@param opts? lazyvim.util.pick.Opts
|
|
open = function(builtin, opts)
|
|
opts = opts or {}
|
|
if opts.cwd and opts.cwd ~= vim.uv.cwd() then
|
|
local function open_cwd_dir()
|
|
local action_state = require("telescope.actions.state")
|
|
local line = action_state.get_current_line()
|
|
LazyVim.pick.open(
|
|
builtin,
|
|
vim.tbl_deep_extend("force", {}, opts or {}, {
|
|
root = false,
|
|
default_text = line,
|
|
})
|
|
)
|
|
end
|
|
---@diagnostic disable-next-line: inject-field
|
|
opts.attach_mappings = function(_, map)
|
|
-- opts.desc is overridden by telescope, until it's changed there is this fix
|
|
map("i", "<a-c>", open_cwd_dir, { desc = "Open cwd Directory" })
|
|
return true
|
|
end
|
|
end
|
|
|
|
require("telescope.builtin")[builtin](opts)
|
|
end,
|
|
}
|
|
if not LazyVim.pick.register(picker) then
|
|
return {}
|
|
end
|
|
|
|
return {
|
|
-- Fuzzy finder.
|
|
-- The default key bindings to find files will use Telescope's
|
|
-- `find_files` or `git_files` depending on whether the
|
|
-- directory is a git repo.
|
|
{
|
|
"nvim-telescope/telescope.nvim",
|
|
cmd = "Telescope",
|
|
version = false, -- telescope did only one release, so use HEAD for now
|
|
dependencies = {
|
|
{
|
|
"nvim-telescope/telescope-fzf-native.nvim",
|
|
build = have_make and "make"
|
|
or "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build",
|
|
enabled = have_make or have_cmake,
|
|
config = function(plugin)
|
|
LazyVim.on_load("telescope.nvim", function()
|
|
local ok, err = pcall(require("telescope").load_extension, "fzf")
|
|
if not ok then
|
|
local lib = plugin.dir .. "/build/libfzf." .. (LazyVim.is_win() and "dll" or "so")
|
|
if not vim.uv.fs_stat(lib) then
|
|
LazyVim.warn("`telescope-fzf-native.nvim` not built. Rebuilding...")
|
|
require("lazy").build({ plugins = { plugin }, show = false }):wait(function()
|
|
LazyVim.info("Rebuilding `telescope-fzf-native.nvim` done.\nPlease restart Neovim.")
|
|
end)
|
|
else
|
|
LazyVim.error("Failed to load `telescope-fzf-native.nvim`:\n" .. err)
|
|
end
|
|
end
|
|
end)
|
|
end,
|
|
},
|
|
},
|
|
keys = {
|
|
{
|
|
"<leader>,",
|
|
"<cmd>Telescope buffers sort_mru=true sort_lastused=true<cr>",
|
|
desc = "Switch Buffer",
|
|
},
|
|
{ "<leader>/", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
|
|
{ "<leader>:", "<cmd>Telescope command_history<cr>", desc = "Command History" },
|
|
{ "<leader><space>", LazyVim.pick("auto"), desc = "Find Files (Root Dir)" },
|
|
-- find
|
|
{ "<leader>fb", "<cmd>Telescope buffers sort_mru=true sort_lastused=true<cr>", desc = "Buffers" },
|
|
{ "<leader>fc", LazyVim.pick.config_files(), desc = "Find Config File" },
|
|
{ "<leader>ff", LazyVim.pick("auto"), desc = "Find Files (Root Dir)" },
|
|
{ "<leader>fF", LazyVim.pick("auto", { root = false }), desc = "Find Files (cwd)" },
|
|
{ "<leader>fg", "<cmd>Telescope git_files<cr>", desc = "Find Files (git-files)" },
|
|
{ "<leader>fr", "<cmd>Telescope oldfiles<cr>", desc = "Recent" },
|
|
{ "<leader>fR", LazyVim.pick("oldfiles", { cwd = vim.uv.cwd() }), desc = "Recent (cwd)" },
|
|
-- git
|
|
{ "<leader>gc", "<cmd>Telescope git_commits<CR>", desc = "Commits" },
|
|
{ "<leader>gs", "<cmd>Telescope git_status<CR>", desc = "Status" },
|
|
-- search
|
|
{ '<leader>s"', "<cmd>Telescope registers<cr>", desc = "Registers" },
|
|
{ "<leader>sa", "<cmd>Telescope autocommands<cr>", desc = "Auto Commands" },
|
|
{ "<leader>sb", "<cmd>Telescope current_buffer_fuzzy_find<cr>", desc = "Buffer" },
|
|
{ "<leader>sc", "<cmd>Telescope command_history<cr>", desc = "Command History" },
|
|
{ "<leader>sC", "<cmd>Telescope commands<cr>", desc = "Commands" },
|
|
{ "<leader>sd", "<cmd>Telescope diagnostics bufnr=0<cr>", desc = "Document Diagnostics" },
|
|
{ "<leader>sD", "<cmd>Telescope diagnostics<cr>", desc = "Workspace Diagnostics" },
|
|
{ "<leader>sg", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
|
|
{ "<leader>sG", LazyVim.pick("live_grep", { root = false }), desc = "Grep (cwd)" },
|
|
{ "<leader>sh", "<cmd>Telescope help_tags<cr>", desc = "Help Pages" },
|
|
{ "<leader>sH", "<cmd>Telescope highlights<cr>", desc = "Search Highlight Groups" },
|
|
{ "<leader>sj", "<cmd>Telescope jumplist<cr>", desc = "Jumplist" },
|
|
{ "<leader>sk", "<cmd>Telescope keymaps<cr>", desc = "Key Maps" },
|
|
{ "<leader>sl", "<cmd>Telescope loclist<cr>", desc = "Location List" },
|
|
{ "<leader>sM", "<cmd>Telescope man_pages<cr>", desc = "Man Pages" },
|
|
{ "<leader>sm", "<cmd>Telescope marks<cr>", desc = "Jump to Mark" },
|
|
{ "<leader>so", "<cmd>Telescope vim_options<cr>", desc = "Options" },
|
|
{ "<leader>sR", "<cmd>Telescope resume<cr>", desc = "Resume" },
|
|
{ "<leader>sq", "<cmd>Telescope quickfix<cr>", desc = "Quickfix List" },
|
|
{ "<leader>sw", LazyVim.pick("grep_string", { word_match = "-w" }), desc = "Word (Root Dir)" },
|
|
{ "<leader>sW", LazyVim.pick("grep_string", { root = false, word_match = "-w" }), desc = "Word (cwd)" },
|
|
{ "<leader>sw", LazyVim.pick("grep_string"), mode = "v", desc = "Selection (Root Dir)" },
|
|
{ "<leader>sW", LazyVim.pick("grep_string", { root = false }), mode = "v", desc = "Selection (cwd)" },
|
|
{ "<leader>uC", LazyVim.pick("colorscheme", { enable_preview = true }), desc = "Colorscheme with Preview" },
|
|
{
|
|
"<leader>ss",
|
|
function()
|
|
require("telescope.builtin").lsp_document_symbols({
|
|
symbols = require("lazyvim.config").get_kind_filter(),
|
|
})
|
|
end,
|
|
desc = "Goto Symbol",
|
|
},
|
|
{
|
|
"<leader>sS",
|
|
function()
|
|
require("telescope.builtin").lsp_dynamic_workspace_symbols({
|
|
symbols = require("lazyvim.config").get_kind_filter(),
|
|
})
|
|
end,
|
|
desc = "Goto Symbol (Workspace)",
|
|
},
|
|
},
|
|
opts = function()
|
|
local actions = require("telescope.actions")
|
|
|
|
local open_with_trouble = function(...)
|
|
return require("trouble.sources.telescope").open(...)
|
|
end
|
|
local find_files_no_ignore = function()
|
|
local action_state = require("telescope.actions.state")
|
|
local line = action_state.get_current_line()
|
|
LazyVim.pick("find_files", { no_ignore = true, default_text = line })()
|
|
end
|
|
local find_files_with_hidden = function()
|
|
local action_state = require("telescope.actions.state")
|
|
local line = action_state.get_current_line()
|
|
LazyVim.pick("find_files", { hidden = true, default_text = line })()
|
|
end
|
|
|
|
return {
|
|
defaults = {
|
|
prompt_prefix = " ",
|
|
selection_caret = " ",
|
|
-- open files in the first window that is an actual file.
|
|
-- use the current window if no other window is available.
|
|
get_selection_window = function()
|
|
local wins = vim.api.nvim_list_wins()
|
|
table.insert(wins, 1, vim.api.nvim_get_current_win())
|
|
for _, win in ipairs(wins) do
|
|
local buf = vim.api.nvim_win_get_buf(win)
|
|
if vim.bo[buf].buftype == "" then
|
|
return win
|
|
end
|
|
end
|
|
return 0
|
|
end,
|
|
mappings = {
|
|
i = {
|
|
["<c-t>"] = open_with_trouble,
|
|
["<a-t>"] = open_with_trouble,
|
|
["<a-i>"] = find_files_no_ignore,
|
|
["<a-h>"] = find_files_with_hidden,
|
|
["<C-Down>"] = actions.cycle_history_next,
|
|
["<C-Up>"] = actions.cycle_history_prev,
|
|
["<C-f>"] = actions.preview_scrolling_down,
|
|
["<C-b>"] = actions.preview_scrolling_up,
|
|
},
|
|
n = {
|
|
["q"] = actions.close,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
end,
|
|
},
|
|
|
|
-- Flash Telescope config
|
|
{
|
|
"nvim-telescope/telescope.nvim",
|
|
optional = true,
|
|
opts = function(_, opts)
|
|
if not LazyVim.has("flash.nvim") then
|
|
return
|
|
end
|
|
local function flash(prompt_bufnr)
|
|
require("flash").jump({
|
|
pattern = "^",
|
|
label = { after = { 0, 0 } },
|
|
search = {
|
|
mode = "search",
|
|
exclude = {
|
|
function(win)
|
|
return vim.bo[vim.api.nvim_win_get_buf(win)].filetype ~= "TelescopeResults"
|
|
end,
|
|
},
|
|
},
|
|
action = function(match)
|
|
local picker = require("telescope.actions.state").get_current_picker(prompt_bufnr)
|
|
picker:set_selection(match.pos[1] - 1)
|
|
end,
|
|
})
|
|
end
|
|
opts.defaults = vim.tbl_deep_extend("force", opts.defaults or {}, {
|
|
mappings = { n = { s = flash }, i = { ["<c-s>"] = flash } },
|
|
})
|
|
end,
|
|
},
|
|
|
|
-- better vim.ui with telescope
|
|
{
|
|
"stevearc/dressing.nvim",
|
|
lazy = true,
|
|
init = function()
|
|
---@diagnostic disable-next-line: duplicate-set-field
|
|
vim.ui.select = function(...)
|
|
require("lazy").load({ plugins = { "dressing.nvim" } })
|
|
return vim.ui.select(...)
|
|
end
|
|
---@diagnostic disable-next-line: duplicate-set-field
|
|
vim.ui.input = function(...)
|
|
require("lazy").load({ plugins = { "dressing.nvim" } })
|
|
return vim.ui.input(...)
|
|
end
|
|
end,
|
|
},
|
|
}
|