112 lines
5 KiB
Lua
112 lines
5 KiB
Lua
vim.g.mapleader = " "
|
|
|
|
-- ─< lua/keymaps.lua >─────────────────────────────────────────────────────────────────
|
|
local nomap = vim.keymap.set
|
|
nomap("i", "<C-k>", "")
|
|
nomap("n", "<C-k>", "")
|
|
nomap("n", "q", "")
|
|
nomap("v", "q", "")
|
|
nomap("v", "<leader>S", "")
|
|
|
|
local map = vim.keymap.set
|
|
|
|
map("n", "<Esc>", "<cmd>nohlsearch<CR>")
|
|
|
|
-- ─< Comment >─────────────────────────────────────────────────────────────────────────
|
|
map("n", "<S-c>", "gcc", { desc = "comment toggle", remap = true })
|
|
map("v", "<S-c>", "gc", { desc = "comment toggle", remap = true })
|
|
|
|
-- ─< Terminal >────────────────────────────────────────────────────────────────────────
|
|
map("t", "<C-x>", "<C-\\><C-N>", { desc = "terminal escape terminal mode" })
|
|
|
|
-- ─< Movement while in "insert"-mode >─────────────────────────────────────────────────
|
|
map("i", "<C-b>", "<ESC>^i", { desc = "move beginning of line" })
|
|
map("i", "<C-e>", "<End>", { desc = "move end of line" })
|
|
map("i", "<C-h>", "<Left>", { desc = "move left" })
|
|
map("i", "<C-l>", "<Right>", { desc = "move right" })
|
|
map("i", "<C-j>", "<Down>", { desc = "move down" })
|
|
map("i", "<C-k>", "<Up>", { desc = "move up" })
|
|
|
|
map("n", ";", ":", { desc = "CMD enter command mode" })
|
|
map("i", "jk", "<ESC>")
|
|
map("i", "<C-c>", "<ESC>")
|
|
map("n", "<C-c>", "<ESC>")
|
|
map("v", "<C-c>", "<ESC>")
|
|
|
|
map("n", "<leader>x", "<cmd>bd!<CR>")
|
|
|
|
-- ─< Disable arrow keys in normal mode >───────────────────────────────────────────────
|
|
map("n", "<left>", '<cmd>echo "Use h to move!!"<CR>')
|
|
map("n", "<right>", '<cmd>echo "Use l to move!!"<CR>')
|
|
map("n", "<up>", '<cmd>echo "Use k to move!!"<CR>')
|
|
map("n", "<down>", '<cmd>echo "Use j to move!!"<CR>')
|
|
|
|
map("n", "<leader>l", "<C-w><C-l>", { desc = "Move focus to the right window" })
|
|
map("n", "<leader>h", "<C-w><C-h>", { desc = "Move focus to the left window" })
|
|
map("n", "<leader>j", "<C-w><C-j>", { desc = "Move focus to the lower window" })
|
|
map("n", "<leader>k", "<C-w><C-k>", { desc = "Move focus to the upper window" })
|
|
|
|
-- map("n", "<leader>p", vim.cmd.Ex)
|
|
map("n", "<leader>q", vim.cmd.q)
|
|
map("n", "<leader>s", vim.cmd.w)
|
|
map("n", "<C-s>", vim.cmd.w)
|
|
|
|
-- ─< rename word under cursor >───────────────────────────────────────────────────────────
|
|
map("n", "<leader>R", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]])
|
|
|
|
-- window management
|
|
map("n", "<leader>sv", "<C-w>v", { desc = "Split window vertically" }) -- split window vertically
|
|
map("n", "<leader>sh", "<C-w>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" }, "<leader>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
|