1
0
Fork 0
numbers/nvim/lua/plugins/telescope.lua

151 lines
4.2 KiB
Lua

local actions = require("telescope.actions")
local previewers = require("telescope.previewers")
local builtin = require("telescope.builtin")
local Job = require("plenary.job")
local new_maker = function(filepath, bufnr, opts)
filepath = vim.fn.expand(filepath)
Job
:new({
command = "file",
args = { "--mime-type", "-b", filepath },
on_exit = function(j)
local mime_type = vim.split(j:result()[1], "/")[1]
if mime_type == "text" then
previewers.buffer_previewer_maker(filepath, bufnr, opts)
else
vim.schedule(function()
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, { "BINARY" })
end)
end
end,
})
:sync()
end
require("telescope").setup({
defaults = require("telescope.themes").get_ivy({
dynamic_preview_title = true,
vimgrep_arguments = {
"rg",
"--color=never",
"--no-heading",
"--with-filename",
"--line-number",
"--column",
"--smart-case",
"--trim",
},
preview = {
filesize_limit = 5,
timeout = 150,
treesitter = true,
title = false,
},
borderchars = { " ", " ", " ", " ", " ", " ", " ", " " },
sorting_strategy = "ascending",
layout_config = {
prompt_position = "top",
},
pickers = {
buffers = {
mappings = {
n = {
["d"] = actions.delete_buffer,
},
},
sort_mru = true,
sort_lastused = true,
},
find_files = {
find_command = { "fd", "--type", "f", "-c always", "-H", "--strip-cwd-prefix" },
mappings = {
n = {
["cd"] = function(prompt_bufnr)
local selection = require("telescope.actions.state").get_selected_entry()
local dir = vim.fn.fnamemodify(selection.path, ":p:h")
require("telescope.actions").close(prompt_bufnr)
-- Depending on what you want put `cd`, `lcd`, `tcd`
vim.cmd(string.format("silent lcd %s", dir))
end,
},
},
hidden = true,
},
},
selection_caret = "",
color_devicons = true,
file_ignore_patterns = { "node_modules", ".git" },
set_env = { ["COLORTERM"] = "truecolor" },
buffer_previewer_maker = new_maker,
mappings = {
i = {
["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist,
["<C-x>"] = false,
["<C-o>"] = actions.select_horizontal,
["<CR>"] = actions.select_default + actions.center,
["<esc>"] = actions.close,
["<C-j>"] = actions.move_selection_next,
["<C-k>"] = actions.move_selection_previous,
["<TAB>"] = actions.toggle_selection + actions.move_selection_next,
["<C-s>"] = actions.send_selected_to_qflist,
["<A-p>"] = require("telescope.actions.layout").toggle_preview,
},
n = {
["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist,
["<A-p>"] = require("telescope.actions.layout").toggle_preview,
},
},
extensions = {
file_browser = {
hidden = true,
theme = "ivy",
dir_icon = "",
},
},
}),
})
local delta = previewers.new_termopen_previewer({
get_command = function(entry)
return { "git", "-c", "core.pager=delta", "-c", "delta.side-by-side=false", "diff", entry.value .. "^!" }
end,
})
Delta_git_commits = function(opts)
opts = opts or {}
opts.previewer = {
delta,
previewers.git_commit_message.new(opts),
previewers.git_commit_diff_as_was.new(opts),
}
builtin.git_commits(opts)
end
Delta_git_bcommits = function(opts)
opts = opts or {}
opts.previewer = {
delta,
previewers.git_commit_message.new(opts),
previewers.git_commit_diff_as_was.new(opts),
}
builtin.git_bcommits(opts)
end
local default_opts = { noremap = true, silent = true }
vim.api.nvim_set_keymap("n", "<F1>", "<cmd>Telescope help_tags<CR>", default_opts)
vim.api.nvim_set_keymap("n", "<F2>", "<cmd>Telescope file_browser<CR>", default_opts)
vim.api.nvim_set_keymap(
"n",
"<F3>",
":lua require'telescope'.extensions.file_browser.file_browser({path = vim.fn.expand('%:p:h')})<CR>",
default_opts
)
vim.api.nvim_set_keymap("n", "<F4>", "<cmd>Telescope buffers<CR>", default_opts)
vim.api.nvim_set_keymap("n", "<M-f>", "<cmd>Telescope live_grep<CR>", default_opts)
vim.api.nvim_set_keymap("n", "<M-g>", "<cmd>Telescope git_commits<CR>", default_opts)
vim.api.nvim_set_keymap("n", "<M-S-r>", "<cmd>Telescope resume<CR>", default_opts)
require("telescope").load_extension("fzf")
require("telescope").load_extension("file_browser")