Files

148 lines
5.9 KiB
Lua

vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
vim.keymap.set("x", "<leader>p", "\"_dP")
if package.config:sub(1, 1) == "\\" then
vim.keymap.set("n", "<leader>oe", ":!explorer .<CR><CR>", { desc = "[O]pen [E]xplorer in current working directory" })
vim.keymap.set("n", "<leader>ot", ":!wt -w 0 nt -d .<CR><CR>",
{ desc = "[O]pen Windows [T]erminal in current working directory" })
vim.keymap.set("n", "<leader>oce", function()
local path = vim.api.nvim_buf_get_name(0)
local dir = path:sub(1, path:find('\\[^\\]*$'))
os.execute("explorer " .. dir)
end, { desc = "[O]pen [C]urrent buffer [Explorer]" })
end
-- Telescope
local builtin = require("telescope.builtin")
if builtin then
vim.keymap.set("n", "<leader>sh", builtin.help_tags, { desc = "[S]earch [H]elp" })
vim.keymap.set("n", "<leader>sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" })
vim.keymap.set("n", "<leader>ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" })
vim.keymap.set("n", "<leader>sc", builtin.commands, { desc = "[S]earch [C]ommands" })
vim.keymap.set("n", "<leader>sf", builtin.find_files, { desc = "[S]earch [F]iles" })
vim.keymap.set("n", "<leader>sw", builtin.grep_string, { desc = "[S]earch current [W]ord" })
vim.keymap.set("n", "<leader>sg", builtin.live_grep, { desc = "[S]earch by [G]rep" })
vim.keymap.set("n", "<leader>sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" })
vim.keymap.set("n", "<leader>sr", builtin.resume, { desc = "[S]earch [R]esume" })
vim.keymap.set("n", "<leader>s.", builtin.oldfiles, { desc = "[S]earch Recent Files ('.' for repeat)" })
vim.keymap.set("n", "<leader>bc", ":Telescope file_browser path=%:p:h select_buffer=true<CR>", { noremap = true })
vim.keymap.set("n", "<leader>fb", ":Telescope file_browser path=. select_buffer=true<CR>", { noremap = true })
vim.keymap.set("n", "<leader>bb", builtin.buffers, { noremap = true })
vim.keymap.set("n", "<leader>/", builtin.current_buffer_fuzzy_find, { desc = "[/] Fuzzily search in curent buffer" })
vim.keymap.set("n", "<leader>s/", function()
builtin.live_grep({
grep_open_files = true,
prompt_title = "Live Grep in Open Files"
})
end,
{ desc = "[S]earch [/] in Open files" }
)
vim.keymap.set("n", "<leader>sn", function()
builtin.find_files({ cwd = vim.fn.expand("$XDG_CONFIG_HOME") .. "/nvim/" })
end,
{ desc = "[S]earch [N]eovim files" }
)
vim.api.nvim_create_autocmd("FileType", {
pattern = { "markdown" },
callback = function()
vim.schedule(function()
vim.keymap.set("n", "gd", function()
require("telescope.builtin").grep_string({ search = vim.call("expand", "<cword>") })
end, { desc = "Grep search word under cursor" })
end)
end
})
end
--LSP
vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float)
vim.keymap.set("n", "[d", function()
vim.diagnostic.jump({ count = -1, float = true })
end)
vim.keymap.set("n", "]d", function()
vim.diagnostic.jump({ count = 1, float = true })
end)
vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist)
--Highlight on yank
vim.api.nvim_create_autocmd("TextYankPost", {
desc = "Highlight when yanking (copying) text",
group = vim.api.nvim_create_augroup("highlight-yank", { clear = true }),
callback = function()
vim.highlight.on_yank()
end
})
-- Esc to exit to normal mode in terminal
vim.keymap.set("t", "<Esc>", "<C-\\><C-n>")
vim.keymap.set("n", "<leader>to", ":tabnew<CR>", { desc = "[T]ab [O]pen" })
vim.keymap.set("n", "<leader>tc", ":tabclose<CR>", { desc = "[T]ab [C]lose" })
local qf_group = vim.api.nvim_create_augroup("quickfix_autocommands", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
pattern = { "qf" },
callback = function()
vim.api.nvim_buf_set_keymap(0, "n", "q", ":q<cr>", { desc = "Close current QuickFix buffer" })
vim.api.nvim_buf_set_keymap(0, "n", "<Escape>", ":q<cr>", { desc = "Close current QuickFix buffer" })
vim.api.nvim_buf_set_keymap(0, "n", "<leader><CR>", "<C-w><Enter><C-w>L",
{ desc = "Open quick fix element in vertical split" })
end,
group = qf_group
})
function IsLocationListOpen()
for _, wininfo in ipairs(vim.fn.getwininfo()) do
if wininfo.loclist == true and wininfo.tabnr == vim.fn.tabpagenr() then
return true
end
end
return false
end
function AddLocationListEntry()
local new_entry = {
filename = vim.fn.expand("%:p"),
lnum = vim.fn.line("."),
col = vim.fn.col("."),
text = vim.api.nvim_get_current_line(),
type = "I",
}
vim.fn.setloclist(0, { new_entry }, "a")
if not IsLocationListOpen() then
vim.cmd("lopen")
vim.cmd.wincmd("p")
end
end
vim.keymap.set("n", "<leader>la", AddLocationListEntry, { desc = "[L]ocation list [a]ppend current line" })
vim.api.nvim_create_autocmd("FileType", {
pattern = "help",
callback = function()
vim.schedule(function()
vim.keymap.set("n", "<C-]>", function()
local word = vim.fn.expand('<cWORD>')
-- Extract tag from |tag| format used in help files
local tag = word:match('|([^|]+)|') or word
if tag then
-- Remove any trailing special characters
tag = tag:gsub('[^%w%-_*]', '')
if tag ~= '' then
local success = pcall(vim.cmd, 'tag ' .. tag)
if not success then
-- Try fuzzy search
vim.cmd('tag /' .. tag)
end
end
end
end)
end)
end
})