| @ -1,184 +1,175 @@ | |||
| return { | |||
| "nvim-telescope/telescope.nvim", | |||
| dependencies = { | |||
| "nvim-lua/plenary.nvim", | |||
| { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, | |||
| "nvim-tree/nvim-web-devicons", | |||
| "debugloop/telescope-undo.nvim", | |||
| "nvim-telescope/telescope-ui-select.nvim", | |||
| }, | |||
| config = function() | |||
| local telescope = require("telescope") | |||
| local actions = require("telescope.actions") | |||
| local previewers = require("telescope.previewers") | |||
| local previewers_utils = require("telescope.previewers.utils") | |||
| local sorters = require("telescope.sorters") | |||
| local builtin = require("telescope.builtin") | |||
| local max_size = 100000 | |||
| local truncate_large_files = function(filepath, bufnr, opts) | |||
| opts = opts or {} | |||
| filepath = vim.fn.expand(filepath) | |||
| ---@diagnostic disable-next-line: undefined-field | |||
| vim.loop.fs_stat(filepath, function(_, stat) | |||
| if not stat then | |||
| return | |||
| end | |||
| if stat.size > max_size then | |||
| local cmd = { "head", "-c", max_size, filepath } | |||
| previewers_utils.job_maker(cmd, bufnr, opts) | |||
| else | |||
| previewers.buffer_previewer_maker(filepath, bufnr, opts) | |||
| end | |||
| end) | |||
| end | |||
| telescope.setup({ | |||
| defaults = { | |||
| file_sorter = sorters.get_fzy_sorter, | |||
| color_devicons = true, | |||
| buffer_previewer_maker = truncate_large_files, | |||
| initial_mode = "insert", | |||
| selection_strategy = "reset", | |||
| sorting_strategy = "ascending", | |||
| layout_strategy = "horizontal", | |||
| layout_config = { | |||
| horizontal = { | |||
| prompt_position = "top", | |||
| preview_width = 0.55, | |||
| results_width = 0.8, | |||
| }, | |||
| vertical = { | |||
| mirror = false, | |||
| }, | |||
| width = 0.87, | |||
| height = 0.80, | |||
| preview_cutoff = 120, | |||
| }, | |||
| path_display = { "truncate" }, | |||
| winblend = 0, | |||
| border = {}, | |||
| borderchars = nil, | |||
| mappings = { | |||
| i = { | |||
| ["<C-n>"] = actions.move_selection_next, | |||
| ["<C-p>"] = actions.move_selection_previous, | |||
| ["<C-j>"] = actions.cycle_history_next, | |||
| ["<C-k>"] = actions.cycle_history_prev, | |||
| ["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist, | |||
| }, | |||
| }, | |||
| }, | |||
| pickers = { | |||
| diagnostics = { | |||
| theme = "ivy", | |||
| initial_mode = "normal", | |||
| layout_config = { | |||
| preview_cutoff = 9999, | |||
| }, | |||
| }, | |||
| }, | |||
| extensions = { | |||
| undo = { | |||
| side_by_side = true, | |||
| mappings = { | |||
| i = { | |||
| ["<CR>"] = require("telescope-undo.actions").restore, | |||
| }, | |||
| n = { | |||
| ["<CR>"] = require("telescope-undo.actions").restore, | |||
| ["y"] = require("telescope-undo.actions").yank_additions, | |||
| ["Y"] = require("telescope-undo.actions").yank_deletions, | |||
| ["u"] = require("telescope-undo.actions").restore, | |||
| }, | |||
| }, | |||
| }, | |||
| ["ui-select"] = { | |||
| require("telescope.themes").get_dropdown({}), | |||
| }, | |||
| }, | |||
| }) | |||
| telescope.load_extension("fzf") | |||
| telescope.load_extension("undo") | |||
| telescope.load_extension("ui-select") | |||
| -- We cache the results of "git rev-parse" | |||
| -- Process creation is expensive in Windows, so this reduces latency | |||
| local is_inside_work_tree = {} | |||
| local project_files = function() | |||
| local cwd = vim.fn.getcwd() | |||
| if is_inside_work_tree[cwd] == nil then | |||
| vim.fn.system("git rev-parse --is-inside-work-tree") | |||
| is_inside_work_tree[cwd] = vim.v.shell_error == 0 | |||
| end | |||
| if is_inside_work_tree[cwd] then | |||
| builtin.git_files({ show_untracked = true, hidden = true }) | |||
| else | |||
| builtin.find_files({}) | |||
| end | |||
| end | |||
| -- set keymaps | |||
| local keymap = vim.keymap | |||
| keymap.set("n", "<leader>ff", function() | |||
| builtin.live_grep({ hidden = true }) | |||
| end, {}) | |||
| keymap.set("n", "<leader>p", project_files, {}) | |||
| keymap.set("n", "<leader>fr", builtin.resume, {}) | |||
| keymap.set("n", "<leader>fb", builtin.buffers, {}) | |||
| keymap.set("n", "<leader>fo", builtin.oldfiles, {}) | |||
| keymap.set("n", "<leader>m", builtin.marks, {}) | |||
| keymap.set("n", "<leader>cc", builtin.commands, {}) | |||
| keymap.set("n", "<leader>ch", builtin.command_history, {}) | |||
| keymap.set("n", "<leader>gb", function() | |||
| builtin.git_branches({ | |||
| attach_mappings = function(_, map) | |||
| map("i", "<c-d>", actions.git_delete_branch) | |||
| map("n", "<c-d>", actions.git_delete_branch) | |||
| return true | |||
| end, | |||
| }) | |||
| end, {}) | |||
| keymap.set("n", "<leader>gc", builtin.git_commits, {}) | |||
| keymap.set("n", "<leader>vh", builtin.help_tags, {}) | |||
| keymap.set("n", "<leader>ds", builtin.lsp_document_symbols, {}) | |||
| keymap.set("n", "<leader>ws", builtin.lsp_workspace_symbols, {}) | |||
| keymap.set("n", "<leader>dws", builtin.lsp_dynamic_workspace_symbols, {}) | |||
| keymap.set("n", "<leader>gf", function() | |||
| builtin.grep_string({ | |||
| search = vim.fn.expand("<cword>"), | |||
| }) | |||
| end) | |||
| keymap.set("n", "<leader>gF", function() | |||
| builtin.grep_string({ | |||
| search = vim.fn.expand("<cWORD>"), | |||
| }) | |||
| end) | |||
| keymap.set("n", "<leader>gD", function() | |||
| builtin.find_files({ | |||
| search_file = vim.fn.expand("<cword>"), | |||
| }) | |||
| end) | |||
| vim.keymap.set("n", "<leader>u", "<cmd>Telescope undo<cr>") | |||
| end, | |||
| "nvim-telescope/telescope.nvim", | |||
| dependencies = { | |||
| "nvim-lua/plenary.nvim", | |||
| { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, | |||
| "nvim-tree/nvim-web-devicons", | |||
| "debugloop/telescope-undo.nvim", | |||
| "nvim-telescope/telescope-ui-select.nvim", | |||
| }, | |||
| config = function() | |||
| local telescope = require("telescope") | |||
| local actions = require("telescope.actions") | |||
| local previewers = require("telescope.previewers") | |||
| local previewers_utils = require("telescope.previewers.utils") | |||
| local sorters = require("telescope.sorters") | |||
| local builtin = require("telescope.builtin") | |||
| local max_size = 100000 | |||
| local truncate_large_files = function(filepath, bufnr, opts) | |||
| opts = opts or {} | |||
| filepath = vim.fn.expand(filepath) | |||
| ---@diagnostic disable-next-line: undefined-field | |||
| vim.loop.fs_stat(filepath, function(_, stat) | |||
| if not stat then | |||
| return | |||
| end | |||
| if stat.size > max_size then | |||
| local cmd = { "head", "-c", max_size, filepath } | |||
| previewers_utils.job_maker(cmd, bufnr, opts) | |||
| else | |||
| previewers.buffer_previewer_maker(filepath, bufnr, opts) | |||
| end | |||
| end) | |||
| end | |||
| telescope.setup({ | |||
| defaults = vim.tbl_extend( | |||
| "force", | |||
| require("telescope.themes").get_ivy(), | |||
| { | |||
| file_sorter = sorters.get_fzy_sorter, | |||
| color_devicons = true, | |||
| buffer_previewer_maker = truncate_large_files, | |||
| initial_mode = "insert", | |||
| selection_strategy = "reset", | |||
| sorting_strategy = "ascending", | |||
| path_display = { "truncate" }, | |||
| mappings = { | |||
| i = { | |||
| ["<C-n>"] = actions.move_selection_next, | |||
| ["<C-p>"] = actions.move_selection_previous, | |||
| ["<C-j>"] = actions.cycle_history_next, | |||
| ["<C-k>"] = actions.cycle_history_prev, | |||
| ["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist, | |||
| }, | |||
| }, | |||
| } | |||
| ), | |||
| pickers = { | |||
| diagnostics = { | |||
| initial_mode = "normal", | |||
| layout_config = { | |||
| preview_cutoff = 9999, | |||
| }, | |||
| }, | |||
| }, | |||
| themes = { | |||
| ivy = { | |||
| layout_strategy = 'bottom_pane', | |||
| layout_config = { | |||
| height = 50, | |||
| }, | |||
| }, | |||
| }, | |||
| extensions = { | |||
| undo = { | |||
| side_by_side = true, | |||
| mappings = { | |||
| i = { | |||
| ["<CR>"] = require("telescope-undo.actions").restore, | |||
| }, | |||
| n = { | |||
| ["<CR>"] = require("telescope-undo.actions").restore, | |||
| ["y"] = require("telescope-undo.actions").yank_additions, | |||
| ["Y"] = require("telescope-undo.actions").yank_deletions, | |||
| ["u"] = require("telescope-undo.actions").restore, | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| }) | |||
| telescope.load_extension("fzf") | |||
| telescope.load_extension("undo") | |||
| telescope.load_extension("ui-select") | |||
| -- We cache the results of "git rev-parse" | |||
| -- Process creation is expensive in Windows, so this reduces latency | |||
| local is_inside_work_tree = {} | |||
| local project_files = function() | |||
| local cwd = vim.fn.getcwd() | |||
| if is_inside_work_tree[cwd] == nil then | |||
| vim.fn.system("git rev-parse --is-inside-work-tree") | |||
| is_inside_work_tree[cwd] = vim.v.shell_error == 0 | |||
| end | |||
| if is_inside_work_tree[cwd] then | |||
| builtin.git_files({ show_untracked = true, hidden = true }) | |||
| else | |||
| builtin.find_files({}) | |||
| end | |||
| end | |||
| -- set keymaps | |||
| local keymap = vim.keymap | |||
| keymap.set("n", "<leader>ff", function() | |||
| builtin.live_grep({ hidden = true }) | |||
| end, {}) | |||
| keymap.set("n", "<leader>p", project_files, {}) | |||
| keymap.set("n", "<leader>fr", builtin.resume, {}) | |||
| keymap.set("n", "<leader>fb", builtin.buffers, {}) | |||
| keymap.set("n", "<leader>fo", builtin.oldfiles, {}) | |||
| keymap.set("n", "<leader>m", builtin.marks, {}) | |||
| keymap.set("n", "<leader>cc", builtin.commands, {}) | |||
| keymap.set("n", "<leader>ch", builtin.command_history, {}) | |||
| keymap.set("n", "<leader>gb", function() | |||
| builtin.git_branches({ | |||
| attach_mappings = function(_, map) | |||
| map("i", "<c-d>", actions.git_delete_branch) | |||
| map("n", "<c-d>", actions.git_delete_branch) | |||
| return true | |||
| end, | |||
| }) | |||
| end, {}) | |||
| keymap.set("n", "<leader>gc", builtin.git_commits, {}) | |||
| keymap.set("n", "<leader>vh", builtin.help_tags, {}) | |||
| keymap.set("n", "<leader>ds", builtin.lsp_document_symbols, {}) | |||
| keymap.set("n", "<leader>ws", builtin.lsp_workspace_symbols, {}) | |||
| keymap.set("n", "<leader>dws", builtin.lsp_dynamic_workspace_symbols, {}) | |||
| keymap.set("n", "<leader>gf", function() | |||
| builtin.grep_string({ | |||
| search = vim.fn.expand("<cword>"), | |||
| }) | |||
| end) | |||
| keymap.set("n", "<leader>gF", function() | |||
| builtin.grep_string({ | |||
| search = vim.fn.expand("<cWORD>"), | |||
| }) | |||
| end) | |||
| keymap.set("n", "<leader>gD", function() | |||
| builtin.find_files({ | |||
| search_file = vim.fn.expand("<cword>"), | |||
| }) | |||
| end) | |||
| vim.keymap.set("n", "<leader>u", "<cmd>Telescope undo<cr>") | |||
| end, | |||
| } | |||