vim.g.mapleader = " " -- ─< lua/keymaps.lua >───────────────────────────────────────────────────────────────── local nomap = vim.keymap.set nomap("i", "", "") nomap("n", "", "") nomap("n", "q", "") nomap("v", "q", "") nomap("v", "S", "") local map = vim.keymap.set map("n", "", "nohlsearch") -- ─< Comment >───────────────────────────────────────────────────────────────────────── map("n", "", "gcc", { desc = "comment toggle", remap = true }) map("v", "", "gc", { desc = "comment toggle", remap = true }) -- ─< Terminal >──────────────────────────────────────────────────────────────────────── map("t", "", "", { desc = "terminal escape terminal mode" }) -- ─< Movement while in "insert"-mode >───────────────────────────────────────────────── map("i", "", "^i", { desc = "move beginning of line" }) map("i", "", "", { desc = "move end of line" }) map("i", "", "", { desc = "move left" }) map("i", "", "", { desc = "move right" }) map("i", "", "", { desc = "move down" }) map("i", "", "", { desc = "move up" }) map("n", ";", ":", { desc = "CMD enter command mode" }) map("i", "jk", "") map("i", "", "") map("n", "", "") map("v", "", "") map("n", "x", "bd!") -- ─< Disable arrow keys in normal mode >─────────────────────────────────────────────── map("n", "", 'echo "Use h to move!!"') map("n", "", 'echo "Use l to move!!"') map("n", "", 'echo "Use k to move!!"') map("n", "", 'echo "Use j to move!!"') map("n", "l", "", { desc = "Move focus to the right window" }) map("n", "h", "", { desc = "Move focus to the left window" }) map("n", "j", "", { desc = "Move focus to the lower window" }) map("n", "k", "", { desc = "Move focus to the upper window" }) -- map("n", "p", vim.cmd.Ex) map("n", "q", vim.cmd.q) map("n", "s", vim.cmd.w) map("n", "", vim.cmd.w) -- ─< rename word under cursor >─────────────────────────────────────────────────────────── map("n", "R", [[:%s/\<\>//gI]]) -- window management map("n", "sv", "v", { desc = "Split window vertically" }) -- split window vertically map("n", "sh", "s", { desc = "Split window horizontally" }) -- split window horizontally -- ─< Set path to your shell functions file (update this to your actual path) >───────── local shell_script_path = vim.fs.joinpath(vim.fn.stdpath("config") .. "/functions.sh") -- ─< Add this before the keymap definition to check for file existence >─────────────── if vim.uv.fs_stat(shell_script_path) then -- Check if file exists -- inserts shell commands (sources ~/.config/nvim/functions.sh to source predefined functions) vim.keymap.set({ "n", "i" }, "tt", function() vim.ui.input({ prompt = "Shell Command: " }, function(input_cmd) if not input_cmd or input_cmd == "" then return end -- Construct the command to source your functions and execute local full_cmd = string.format( "source %s && %s", -- Uses POSIX-compliant '&&' to fail if source fails vim.fn.shellescape(shell_script_path), input_cmd ) -- Execute in bash to ensure function availability local result = vim.fn.system({ "bash", "--norc", "--noprofile", "-c", full_cmd }) local exit_code = vim.v.shell_error -- Handle errors if exit_code ~= 0 then vim.notify( "Error (" .. exit_code .. "):\n" .. result, vim.log.levels.ERROR, { title = "Command Failed" } ) return end -- Process output local lines = vim.split(result:gsub("\n$", ""), "\n") -- Insert at cursor position local row, col = unpack(vim.api.nvim_win_get_cursor(0)) if #lines == 1 then vim.api.nvim_set_current_line( vim.api.nvim_get_current_line():sub(1, col) .. lines[1] .. vim.api.nvim_get_current_line():sub(col + 1) ) else vim.api.nvim_buf_set_lines(0, row, row, false, lines) end end) end, { desc = "Insert Shell Output (with functions)" }) else vim.notify("Shell functions file not found: " .. shell_script_path, vim.log.levels.WARN) end