More mappings, fix multi select with telescope
This commit is contained in:
parent
25bc8e05c4
commit
8d535ad186
@ -68,7 +68,7 @@ M.ui = {
|
|||||||
buttons = {
|
buttons = {
|
||||||
{ " Find File", "Spc f f", "Telescope find_files" },
|
{ " Find File", "Spc f f", "Telescope find_files" },
|
||||||
{ " Recent Files", "Spc f o", "Telescope oldfiles" },
|
{ " Recent Files", "Spc f o", "Telescope oldfiles" },
|
||||||
{ " Find Word", "Spc f w", "Telescope live_grep" },
|
{ " Find Word", "Spc f w", "Telescope find_grep" },
|
||||||
{ " Bookmarks", "Spc m a", "Telescope marks" },
|
{ " Bookmarks", "Spc m a", "Telescope marks" },
|
||||||
{ " Themes", "Spc t h", "Telescope themes" },
|
{ " Themes", "Spc t h", "Telescope themes" },
|
||||||
{ " Mappings", "Spc c h", "NvCheatsheet" },
|
{ " Mappings", "Spc c h", "NvCheatsheet" },
|
||||||
|
|||||||
@ -27,10 +27,10 @@ M.general = {
|
|||||||
-- ["<C-d>"] = { "<cmd> tab Git diff %<CR>", "Git diff this file" },
|
-- ["<C-d>"] = { "<cmd> tab Git diff %<CR>", "Git diff this file" },
|
||||||
["<C-d>"] = { "<cmd> DiffviewOpen -- %<CR>", "Git diff this file" },
|
["<C-d>"] = { "<cmd> DiffviewOpen -- %<CR>", "Git diff this file" },
|
||||||
["<C-o>"] = { "<cmd> DiffviewFileHistory %<CR>", "Git history diff this file" },
|
["<C-o>"] = { "<cmd> DiffviewFileHistory %<CR>", "Git history diff this file" },
|
||||||
["<C-A-d>"] = { "<cmd> DiffviewClose<CR>", "Close git diff" },
|
["<C-a-d>"] = { "<cmd> DiffviewClose<CR>", "Close git diff" },
|
||||||
-- ["<C-p>"] = { "<cmd> tab Git diff<CR>", "Git diff global" },
|
-- ["<C-p>"] = { "<cmd> tab Git diff<CR>", "Git diff global" },
|
||||||
["<C-p>"] = { "<cmd> DiffviewOpen<CR>", "Git diff global" },
|
["<C-p>"] = { "<cmd> DiffviewOpen<CR>", "Git diff global" },
|
||||||
["<A-p>"] = { ":DiffviewOpen HEAD~", "Show last N commits" },
|
["<a-p>"] = { ":DiffviewOpen HEAD~", "Show last N commits" },
|
||||||
["<leader>gd"] = { "<cmd> DiffviewClose<CR>", "Git diff close" },
|
["<leader>gd"] = { "<cmd> DiffviewClose<CR>", "Git diff close" },
|
||||||
|
|
||||||
-- save
|
-- save
|
||||||
@ -46,7 +46,7 @@ M.general = {
|
|||||||
-- ["<leader>n"] = { "<cmd> set nu! <CR>", "Toggle line number" },
|
-- ["<leader>n"] = { "<cmd> set nu! <CR>", "Toggle line number" },
|
||||||
-- ["<leader>rn"] = { "<cmd> set rnu! <CR>", "Toggle relative number" },
|
-- ["<leader>rn"] = { "<cmd> set rnu! <CR>", "Toggle relative number" },
|
||||||
|
|
||||||
-- Allow moving the cursor through wrapped lines with j, k, <Up> and <Down>
|
-- allow moving the cursor through wrapped lines with j, k, <Up> and <Down>
|
||||||
-- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/
|
-- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/
|
||||||
-- empty mode is same as using <cmd> :map
|
-- empty mode is same as using <cmd> :map
|
||||||
-- also don't use g[j|k] when in operator pending mode, so it doesn't alter d, y or c behaviour
|
-- also don't use g[j|k] when in operator pending mode, so it doesn't alter d, y or c behaviour
|
||||||
@ -76,7 +76,7 @@ M.general = {
|
|||||||
-- ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } },
|
-- ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } },
|
||||||
-- ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } },
|
-- ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } },
|
||||||
-- Don't copy the replaced text after pasting in visual mode
|
-- Don't copy the replaced text after pasting in visual mode
|
||||||
-- https://vim.fandom.com/wiki/Replace_a_word_with_yanked_text#Alternative_mapping_for_paste
|
-- https://vim.fandom.com/wiki/Replace_a_word_with_yanked_text#alternative_mapping_for_paste
|
||||||
["p"] = { 'p:let @+=@0<CR>:let @"=@0<CR>', "Dont copy replaced text", opts = { silent = true } },
|
["p"] = { 'p:let @+=@0<CR>:let @"=@0<CR>', "Dont copy replaced text", opts = { silent = true } },
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -99,8 +99,31 @@ M.customstuffs = {
|
|||||||
["<leader>gri"] = { ":Git rebase -i HEAD~", "Git rebase interactive from HEAD" },
|
["<leader>gri"] = { ":Git rebase -i HEAD~", "Git rebase interactive from HEAD" },
|
||||||
["<leader>mkd"] = { "<cmd>lua vim.api.nvim_create_user_command('PeekOpen', require('peek').open, {})<CR>", "Open markdown preview" },
|
["<leader>mkd"] = { "<cmd>lua vim.api.nvim_create_user_command('PeekOpen', require('peek').open, {})<CR>", "Open markdown preview" },
|
||||||
["<leader>mkc"] = { "<cmd>lua vim.api.nvim_create_user_command('PeekClose', require('peek').close, {})<CR>", "Open markdown preview" },
|
["<leader>mkc"] = { "<cmd>lua vim.api.nvim_create_user_command('PeekClose', require('peek').close, {})<CR>", "Open markdown preview" },
|
||||||
}
|
|
||||||
|
|
||||||
|
["n"] = { "nzz", "Next + auto center" },
|
||||||
|
["N"] = { "Nzz", "Previous + auto center" },
|
||||||
|
["("] = { "(zz", "Previous + auto center" },
|
||||||
|
[")"] = { ")zz", "Previous + auto center" },
|
||||||
|
["{"] = { "{zz", "Previous + auto center" },
|
||||||
|
["}"] = { "}zz", "Previous + auto center" },
|
||||||
|
["[["] = { "[[zz", "Previous + auto center" },
|
||||||
|
["]]"] = { "]]zz", "Previous + auto center" },
|
||||||
|
|
||||||
|
-- Mappings: TODO
|
||||||
|
|
||||||
|
-- "trim(system('git branch --show-current 2>/dev/null'))"
|
||||||
|
["<leader>tt"] = { ":call append(line('.') - 1, repeat(' ', indent('.')) . '# TODO-' . trim(system('git branch --show-current 2>/dev/null')) . ': ' . input('Comment >'))<CR>", "Add TODO comment + add to quickfix list" },
|
||||||
|
},
|
||||||
|
v = {
|
||||||
|
["n"] = { "nzz", "Next + auto center" },
|
||||||
|
["N"] = { "Nzz", "Previous + auto center" },
|
||||||
|
["("] = { "(zz", "Previous + auto center" },
|
||||||
|
[")"] = { ")zz", "Previous + auto center" },
|
||||||
|
["{"] = { "{zz", "Previous + auto center" },
|
||||||
|
["}"] = { "}zz", "Previous + auto center" },
|
||||||
|
["[["] = { "[[zz", "Previous + auto center" },
|
||||||
|
["]]"] = { "]]zz", "Previous + auto center" },
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
M.tabufline = {
|
M.tabufline = {
|
||||||
@ -243,12 +266,12 @@ M.lspconfig = {
|
|||||||
"Goto next",
|
"Goto next",
|
||||||
},
|
},
|
||||||
|
|
||||||
["<leader>q"] = {
|
-- ["<leader>q"] = {
|
||||||
function()
|
-- function()
|
||||||
vim.diagnostic.setloclist()
|
-- vim.diagnostic.setloclist()
|
||||||
end,
|
-- end,
|
||||||
"Diagnostic setloclist",
|
-- "Diagnostic setloclist",
|
||||||
},
|
-- },
|
||||||
|
|
||||||
["<leader>fm"] = {
|
["<leader>fm"] = {
|
||||||
function()
|
function()
|
||||||
@ -261,7 +284,7 @@ M.lspconfig = {
|
|||||||
function()
|
function()
|
||||||
vim.lsp.buf.add_workspace_folder()
|
vim.lsp.buf.add_workspace_folder()
|
||||||
end,
|
end,
|
||||||
"Add workspace folder",
|
"add workspace folder",
|
||||||
},
|
},
|
||||||
|
|
||||||
["<leader>wr"] = {
|
["<leader>wr"] = {
|
||||||
@ -297,12 +320,22 @@ M.telescope = {
|
|||||||
|
|
||||||
n = {
|
n = {
|
||||||
-- Resume
|
-- Resume
|
||||||
["<A-f>"] = { "<cmd> Telescope resume <CR>", "Resume" },
|
["<a-f>"] = { "<cmd> Telescope resume <CR>", "Resume" },
|
||||||
-- find
|
-- find
|
||||||
["<C-g>"] = { "<cmd> Telescope find_files <CR>", "Find files" },
|
["<C-g>"] = { "<cmd> Telescope find_files <CR>", "Find files" },
|
||||||
["<C-x>"] = { "<cmd> Telescope find_files follow=true no_ignore=true hidden=true <CR>", "Find all" },
|
["<C-x>"] = { "<cmd> Telescope find_files follow=true no_ignore=true hidden=true <CR>", "Find all" },
|
||||||
["<C-f>"] = { "<cmd> Telescope live_grep <CR>", "Live grep" },
|
["<C-f>"] = { "<cmd> Telescope live_grep <CR>", "Live grep" },
|
||||||
["<C-b>"] = { "<cmd> Telescope buffers <CR>", "Find buffers" },
|
["<C-b>"] = { "<cmd> Telescope buffers <CR>", "Find buffers" },
|
||||||
|
|
||||||
|
["<leader>fg"] = { "<cmd> lua require('telescope.builtin').live_grep({default_text=vim.fn.getreg('/')}) <CR>", "Live grep with actual search value as prefix" },
|
||||||
|
["<leader>ac"] = { ":execute 'vimgrep' input('Pattern >', getreg('/')) '**/*' <CR>", "add search term files in quickfix list" },
|
||||||
|
["<leader>qc"] = { "<cmd> Telescope quickfix <CR>", "Show quickfix list" },
|
||||||
|
["<leader>qr"] = { ":execute 'cdo' '%s/' . input('Search term >', getreg('/')) . '/' . input('Replace by >', getreg('')) . '/g | update' <CR>", "Replace pattern in all quickfix list" },
|
||||||
|
|
||||||
|
["<leader>ll"] = { "<cmd> Telescope loclist <CR>", "Show loclist list" },
|
||||||
|
["<leader>ln"] = { ":lnext<CR>", "Jump to next in loclist" },
|
||||||
|
["<leader>lp"] = { ":lprevious<CR>", "Jump to previous in loclist" },
|
||||||
|
|
||||||
["<leader>fh"] = { "<cmd> Telescope help_tags <CR>", "Help page" },
|
["<leader>fh"] = { "<cmd> Telescope help_tags <CR>", "Help page" },
|
||||||
["<leader>fo"] = { "<cmd> Telescope oldfiles <CR>", "Find oldfiles" },
|
["<leader>fo"] = { "<cmd> Telescope oldfiles <CR>", "Find oldfiles" },
|
||||||
["<leader>fz"] = { "<cmd> Telescope current_buffer_fuzzy_find <CR>", "Find in current buffer" },
|
["<leader>fz"] = { "<cmd> Telescope current_buffer_fuzzy_find <CR>", "Find in current buffer" },
|
||||||
@ -337,21 +370,21 @@ M.nvterm = {
|
|||||||
|
|
||||||
t = {
|
t = {
|
||||||
-- toggle in terminal mode
|
-- toggle in terminal mode
|
||||||
["<A-i>"] = {
|
["<a-i>"] = {
|
||||||
function()
|
function()
|
||||||
require("nvterm.terminal").toggle "float"
|
require("nvterm.terminal").toggle "float"
|
||||||
end,
|
end,
|
||||||
"Toggle floating term",
|
"Toggle floating term",
|
||||||
},
|
},
|
||||||
|
|
||||||
["<A-h>"] = {
|
["<a-h>"] = {
|
||||||
function()
|
function()
|
||||||
require("nvterm.terminal").toggle "horizontal"
|
require("nvterm.terminal").toggle "horizontal"
|
||||||
end,
|
end,
|
||||||
"Toggle horizontal term",
|
"Toggle horizontal term",
|
||||||
},
|
},
|
||||||
|
|
||||||
["<A-v>"] = {
|
["<a-v>"] = {
|
||||||
function()
|
function()
|
||||||
require("nvterm.terminal").toggle "vertical"
|
require("nvterm.terminal").toggle "vertical"
|
||||||
end,
|
end,
|
||||||
@ -361,21 +394,21 @@ M.nvterm = {
|
|||||||
|
|
||||||
n = {
|
n = {
|
||||||
-- toggle in normal mode
|
-- toggle in normal mode
|
||||||
["<A-i>"] = {
|
["<a-i>"] = {
|
||||||
function()
|
function()
|
||||||
require("nvterm.terminal").toggle "float"
|
require("nvterm.terminal").toggle "float"
|
||||||
end,
|
end,
|
||||||
"Toggle floating term",
|
"Toggle floating term",
|
||||||
},
|
},
|
||||||
|
|
||||||
["<A-h>"] = {
|
["<a-h>"] = {
|
||||||
function()
|
function()
|
||||||
require("nvterm.terminal").toggle "horizontal"
|
require("nvterm.terminal").toggle "horizontal"
|
||||||
end,
|
end,
|
||||||
"Toggle horizontal term",
|
"Toggle horizontal term",
|
||||||
},
|
},
|
||||||
|
|
||||||
["<A-v>"] = {
|
["<a-v>"] = {
|
||||||
function()
|
function()
|
||||||
require("nvterm.terminal").toggle "vertical"
|
require("nvterm.terminal").toggle "vertical"
|
||||||
end,
|
end,
|
||||||
@ -474,7 +507,7 @@ M.gitsigns = {
|
|||||||
opts = { expr = true },
|
opts = { expr = true },
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Actions
|
-- actions
|
||||||
["<leader>rh"] = {
|
["<leader>rh"] = {
|
||||||
function()
|
function()
|
||||||
require("gitsigns").reset_hunk()
|
require("gitsigns").reset_hunk()
|
||||||
|
|||||||
@ -1,34 +1,94 @@
|
|||||||
local custom_actions = {}
|
local custom_actions = {}
|
||||||
local actions = require("telescope.actions")
|
local actions = require("telescope.actions")
|
||||||
local action_state = require("telescope.actions.state")
|
local action_state = require("telescope.actions.state")
|
||||||
|
local from_entry = require("telescope.from_entry")
|
||||||
|
|
||||||
function custom_actions._multiopen(prompt_bufnr, open_cmd)
|
|
||||||
local picker = action_state.get_current_picker(prompt_bufnr)
|
|
||||||
local selected_entry = action_state.get_selected_entry()
|
|
||||||
local num_selections = #picker:get_multi_selection()
|
|
||||||
|
|
||||||
if not num_selections or num_selections < 1 then
|
local entry_to_qf = function(entry)
|
||||||
actions.add_selection(prompt_bufnr)
|
local text = entry.text
|
||||||
|
|
||||||
|
if not text then
|
||||||
|
if type(entry.value) == "table" then
|
||||||
|
text = entry.value.text
|
||||||
|
else
|
||||||
|
text = entry.value
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
actions.send_selected_to_loclist(prompt_bufnr)
|
return {
|
||||||
vim.cmd("lfdo " .. open_cmd)
|
bufnr = entry.bufnr,
|
||||||
|
filename = from_entry.path(entry, false, false),
|
||||||
|
lnum = vim.F.if_nil(entry.lnum, 1),
|
||||||
|
col = vim.F.if_nil(entry.col, 1),
|
||||||
|
text = text,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local send_selected_to_list_without_closing_prompt = function(prompt_bufnr, mode, target)
|
||||||
|
local picker = action_state.get_current_picker(prompt_bufnr)
|
||||||
|
|
||||||
|
local qf_entries = {}
|
||||||
|
for _, entry in ipairs(picker:get_multi_selection()) do
|
||||||
|
table.insert(qf_entries, entry_to_qf(entry))
|
||||||
|
end
|
||||||
|
|
||||||
|
local prompt = picker:_get_prompt()
|
||||||
|
-- actions.close(prompt_bufnr)
|
||||||
|
|
||||||
|
vim.api.nvim_exec_autocmds("QuickFixCmdPre", {})
|
||||||
|
if target == "loclist" then
|
||||||
|
vim.fn.setloclist(picker.original_win_id, qf_entries, mode)
|
||||||
|
else
|
||||||
|
local qf_title = string.format([[%s (%s)]], picker.prompt_title, prompt)
|
||||||
|
vim.fn.setqflist(qf_entries, mode)
|
||||||
|
vim.fn.setqflist({}, "a", { title = qf_title })
|
||||||
|
end
|
||||||
|
vim.api.nvim_exec_autocmds("QuickFixCmdPost", {})
|
||||||
|
end
|
||||||
|
|
||||||
|
function custom_actions._multiopen(prompt_bufnr, cmd, cmd2, mode, list)
|
||||||
|
-- actions.send_selected_to_loclist(prompt_bufnr)
|
||||||
|
local picker = action_state.get_current_picker(prompt_bufnr)
|
||||||
|
local multi = picker:get_multi_selection()
|
||||||
|
local single = picker:get_selection()
|
||||||
|
|
||||||
|
local str = ""
|
||||||
|
|
||||||
|
if #multi > 0 then
|
||||||
|
|
||||||
|
send_selected_to_list_without_closing_prompt(prompt_bufnr, mode, list)
|
||||||
|
|
||||||
|
for i, j in ipairs(multi) do
|
||||||
|
if i % 2 == 1 then
|
||||||
|
str = str..cmd.." "..j[1].." | "
|
||||||
|
else
|
||||||
|
str = str..cmd2.." "..j[1].." | "
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
str = cmd.." "..single[1]
|
||||||
|
end
|
||||||
|
|
||||||
|
-- To avoid populating qf or doing ":edit! file", close the prompt first
|
||||||
|
actions.close(prompt_bufnr)
|
||||||
|
vim.api.nvim_command(str)
|
||||||
end
|
end
|
||||||
|
|
||||||
function custom_actions.multi_selection_open(prompt_bufnr)
|
function custom_actions.multi_selection_open(prompt_bufnr)
|
||||||
return custom_actions._multiopen(prompt_bufnr, "edit")
|
return custom_actions._multiopen(prompt_bufnr, "edit", "edit", "a", "loclist")
|
||||||
end
|
end
|
||||||
|
|
||||||
function custom_actions.multi_selection_vsplit(prompt_bufnr)
|
function custom_actions.multi_selection_vsplit(prompt_bufnr)
|
||||||
return custom_actions._multiopen(prompt_bufnr, "vsplit")
|
return custom_actions._multiopen(prompt_bufnr, "vsplit", "split", "a", "loclist")
|
||||||
end
|
end
|
||||||
|
|
||||||
function custom_actions.multi_selection_split(prompt_bufnr)
|
function custom_actions.multi_selection_split(prompt_bufnr)
|
||||||
return custom_actions._multiopen(prompt_bufnr, "split")
|
return custom_actions._multiopen(prompt_bufnr, "split", "vsplit", "a", "loclist")
|
||||||
end
|
end
|
||||||
|
|
||||||
function custom_actions.multi_selection_vtab(prompt_bufnr)
|
function custom_actions.multi_selection_vtab(prompt_bufnr)
|
||||||
return custom_actions._multiopen(prompt_bufnr, "tabe")
|
return custom_actions._multiopen(prompt_bufnr, "tabe", "tabe", "a", "loclist")
|
||||||
end
|
end
|
||||||
|
|
||||||
local options = {
|
local options = {
|
||||||
@ -53,15 +113,15 @@ local options = {
|
|||||||
layout_config = {
|
layout_config = {
|
||||||
horizontal = {
|
horizontal = {
|
||||||
prompt_position = "top",
|
prompt_position = "top",
|
||||||
preview_width = 0.55,
|
preview_width = 0.60,
|
||||||
results_width = 0.8,
|
results_width = 0.8,
|
||||||
},
|
},
|
||||||
vertical = {
|
vertical = {
|
||||||
mirror = false,
|
mirror = false,
|
||||||
},
|
},
|
||||||
width = 0.87,
|
width = 0.90,
|
||||||
height = 0.80,
|
height = 0.92,
|
||||||
preview_cutoff = 120,
|
preview_cutoff = 200,
|
||||||
},
|
},
|
||||||
file_sorter = require("telescope.sorters").get_fuzzy_file,
|
file_sorter = require("telescope.sorters").get_fuzzy_file,
|
||||||
file_ignore_patterns = { "node_modules" },
|
file_ignore_patterns = { "node_modules" },
|
||||||
@ -78,7 +138,7 @@ local options = {
|
|||||||
-- Developer configurations: Not meant for general override
|
-- Developer configurations: Not meant for general override
|
||||||
buffer_previewer_maker = require("telescope.previewers").buffer_previewer_maker,
|
buffer_previewer_maker = require("telescope.previewers").buffer_previewer_maker,
|
||||||
mappings = {
|
mappings = {
|
||||||
n = { ["q"] = require("telescope.actions").close },
|
n = { ["q"] = actions.close },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
pickers = {
|
pickers = {
|
||||||
@ -101,7 +161,7 @@ local options = {
|
|||||||
["<C-V>"] = custom_actions.multi_selection_vsplit,
|
["<C-V>"] = custom_actions.multi_selection_vsplit,
|
||||||
["<C-X>"] = custom_actions.multi_selection_split,
|
["<C-X>"] = custom_actions.multi_selection_split,
|
||||||
["<C-T>"] = custom_actions.multi_selection_tab,
|
["<C-T>"] = custom_actions.multi_selection_tab,
|
||||||
["<C-SPACE>"] = actions.send_selected_to_loclist,
|
["<C-SPACE>"] = actions.send_selected_to_qflist,
|
||||||
},
|
},
|
||||||
n = i,
|
n = i,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -89,6 +89,7 @@ local default_plugins = {
|
|||||||
|
|
||||||
{
|
{
|
||||||
"lukas-reineke/indent-blankline.nvim",
|
"lukas-reineke/indent-blankline.nvim",
|
||||||
|
version = "2.20.7",
|
||||||
init = function()
|
init = function()
|
||||||
require("core.utils").lazy_load "indent-blankline.nvim"
|
require("core.utils").lazy_load "indent-blankline.nvim"
|
||||||
end,
|
end,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user