From ec880d7888504aecca4aed13304e7f9995216d5c Mon Sep 17 00:00:00 2001 From: SL1900 <43700351+SL1900@users.noreply.github.com> Date: Sat, 30 May 2026 13:28:13 +0900 Subject: [PATCH] Added next/previous tab keymap and window picker window switch --- remap.lua | 298 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 154 insertions(+), 144 deletions(-) diff --git a/remap.lua b/remap.lua index 4cba70a..317d2cf 100644 --- a/remap.lua +++ b/remap.lua @@ -1,153 +1,163 @@ -vim.keymap.set("v", "J", ":m '>+1gv=gv") -vim.keymap.set("v", "K", ":m '<-2gv=gv") - -vim.keymap.set("x", "p", "\"_dP") - +vim.keymap.set("v", "J", ":m '>+1gv=gv") +vim.keymap.set("v", "K", ":m '<-2gv=gv") + +vim.keymap.set("x", "p", "\"_dP") + vim.keymap.set("n", "", "zz") vim.keymap.set("n", "", "zz") -if package.config:sub(1, 1) == "\\" then - vim.keymap.set("n", "oe", ":!explorer .", { desc = "[O]pen [E]xplorer in current working directory" }) - vim.keymap.set("n", "ot", ":!wt -w 0 nt -d .", - { desc = "[O]pen Windows [T]erminal in current working directory" }) - vim.keymap.set("n", "oce", function() +if package.config:sub(1, 1) == "\\" then + vim.keymap.set("n", "oe", ":!explorer .", { desc = "[O]pen [E]xplorer in current working directory" }) + vim.keymap.set("n", "ot", ":!wt -w 0 nt -d .", + { desc = "[O]pen Windows [T]erminal in current working directory" }) + vim.keymap.set("n", "oce", function() -- local path = vim.api.nvim_buf_get_name(0) -- local dir = path:sub(1, path:find('\\[^\\]*$')) local dir = vim.fn.expand("%:p:h") dir = string.gsub(dir, "/", "\\") print(dir) 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", "sh", builtin.help_tags, { desc = "[S]earch [H]elp" }) - vim.keymap.set("n", "sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" }) - vim.keymap.set("n", "ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" }) - vim.keymap.set("n", "sc", builtin.commands, { desc = "[S]earch [C]ommands" }) - vim.keymap.set("n", "sf", builtin.find_files, { desc = "[S]earch [F]iles" }) - vim.keymap.set("n", "sw", builtin.grep_string, { desc = "[S]earch current [W]ord" }) - vim.keymap.set("n", "sg", builtin.live_grep, { desc = "[S]earch by [G]rep" }) - vim.keymap.set("n", "sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" }) - vim.keymap.set("n", "sr", builtin.resume, { desc = "[S]earch [R]esume" }) - vim.keymap.set("n", "s.", builtin.oldfiles, { desc = "[S]earch Recent Files ('.' for repeat)" }) - vim.keymap.set("n", "bc", ":Telescope file_browser path=%:p:h select_buffer=true", { noremap = true }) - vim.keymap.set("n", "fb", ":Telescope file_browser path=. select_buffer=true", { noremap = true }) - vim.keymap.set("n", "bb", builtin.buffers, { noremap = true }) - vim.keymap.set("n", "/", builtin.current_buffer_fuzzy_find, { desc = "[/] Fuzzily search in curent buffer" }) - vim.keymap.set("n", "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", "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", "") }) - end, { desc = "Grep search word under cursor" }) - end) - end - }) -end - ---LSP -vim.keymap.set("n", "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", "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", "", "") - -vim.keymap.set("n", "to", ":tabnew", { desc = "[T]ab [O]pen" }) -vim.keymap.set("n", "tc", ":tabclose", { 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", { desc = "Close current QuickFix buffer" }) - vim.api.nvim_buf_set_keymap(0, "n", "", ":q", { desc = "Close current QuickFix buffer" }) - vim.api.nvim_buf_set_keymap(0, "n", "", "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", "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", "", function() - local word = vim.fn.expand('') - - -- 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 -}) + end, { desc = "[O]pen [C]urrent buffer [Explorer]" }) +end + +-- Telescope +local builtin = require("telescope.builtin") +if builtin then + vim.keymap.set("n", "sh", builtin.help_tags, { desc = "[S]earch [H]elp" }) + vim.keymap.set("n", "sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" }) + vim.keymap.set("n", "ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" }) + vim.keymap.set("n", "sc", builtin.commands, { desc = "[S]earch [C]ommands" }) + vim.keymap.set("n", "sf", builtin.find_files, { desc = "[S]earch [F]iles" }) + vim.keymap.set("n", "sw", builtin.grep_string, { desc = "[S]earch current [W]ord" }) + vim.keymap.set("n", "sg", builtin.live_grep, { desc = "[S]earch by [G]rep" }) + vim.keymap.set("n", "sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" }) + vim.keymap.set("n", "sr", builtin.resume, { desc = "[S]earch [R]esume" }) + vim.keymap.set("n", "pr", builtin.pickers, { desc = "[P]ickers [R]esume" }) + vim.keymap.set("n", "s.", builtin.oldfiles, { desc = "[S]earch Recent Files ('.' for repeat)" }) + vim.keymap.set("n", "bc", ":Telescope file_browser path=%:p:h select_buffer=true", { noremap = true }) + vim.keymap.set("n", "fb", ":Telescope file_browser path=. select_buffer=true", { noremap = true }) + vim.keymap.set("n", "bb", builtin.buffers, { noremap = true }) + vim.keymap.set("n", "/", builtin.current_buffer_fuzzy_find, { desc = "[/] Fuzzily search in curent buffer" }) + vim.keymap.set("n", "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", "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", "") }) + end, { desc = "Grep search word under cursor" }) + end) + end + }) +end + +--LSP +vim.keymap.set("n", "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", "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", "", "") + +vim.keymap.set("n", "to", ":tabnew", { desc = "[T]ab [O]pen" }) +vim.keymap.set("n", "tc", ":tabclose", { desc = "[T]ab [C]lose" }) +vim.keymap.set("n", "tn", ":tabnext", { desc = "[T]ab [N]ext" }) +vim.keymap.set("n", "tp", ":tabprevious", { desc = "[T]ab [P]revious" }) + +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", { desc = "Close current QuickFix buffer" }) + vim.api.nvim_buf_set_keymap(0, "n", "", ":q", { desc = "Close current QuickFix buffer" }) + vim.api.nvim_buf_set_keymap(0, "n", "", "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", "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", "", function() + local word = vim.fn.expand('') + + -- 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 +}) + +vim.keymap.set("n", "", function () + local window_picker = require("window-picker") + local win_id = window_picker.pick_window() + if not win_id then return end + vim.api.nvim_set_current_win(win_id) +end)