pojokcodeid.nvim-lazy/lua/pcode/user/keymaps.lua
2025-06-14 19:46:00 +07:00

170 lines
5.5 KiB
Lua

-- definiskanfunction name
local keymap = vim.api.nvim_set_keymap
local opts = { noremap = true, silent = true }
-- Remap space leader keys
keymap("", "<Space>", "<Nop>", opts)
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- MODES
-- mormal mode = "n"
-- insert mode = "i"
-- visual mode = "v"
-- visual block mode = "x"
-- term mode = "t"
-- command mode = "c"
for _, mode in ipairs({ "i", "v", "n", "x" }) do
-- duplicate line
keymap(mode, "<S-Down>", "<cmd>t.<cr>", opts)
keymap(mode, "<S-Up>", "<cmd>t -1<cr>", opts)
-- save file
keymap(mode, "<C-s>", "<cmd>silent! w<cr>", opts)
end
-- duplicate line visual block
keymap("x", "<S-Down>", ":'<,'>t'><cr>", opts)
keymap("x", "<S-Up>", ":'<,'>t-1<cr>", opts)
-- move text up and down
keymap("x", "<A-Down>", ":move '>+1<CR>gv-gv", opts)
keymap("x", "<A-Up>", ":move '<-2<CR>gv-gv", opts)
keymap("n", "<M-Down>", "<cmd>m+<cr>", opts)
keymap("i", "<M-Down>", "<cmd>m+<cr>", opts)
keymap("n", "<M-Up>", "<cmd>m-2<cr>", opts)
keymap("i", "<M-Up>", "<cmd>m-2<cr>", opts)
-- create comment CTRL + / all mode
keymap("v", "<C-_>", "<esc><cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<cr>", opts)
keymap("v", "<C-/>", "<esc><cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<cr>", opts)
keymap("i", "<C-_>", "<esc><cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<cr>", opts)
keymap("i", "<C-/>", "<esc><cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<cr>", opts)
keymap("i", "<C-_>", "<esc><cmd>lua require('Comment.api').toggle.linewise.current()<cr>", opts)
keymap("i", "<C-/>", "<esc><cmd>lua require('Comment.api').toggle.linewise.current()<cr>", opts)
keymap("n", "<C-_>", "<esc><cmd>lua require('Comment.api').toggle.linewise.current()<cr>", opts)
keymap("n", "<C-/>", "<esc><cmd>lua require('Comment.api').toggle.linewise.current()<cr>", opts)
-- close windows
keymap("n", "q", "<cmd>q<cr>", opts)
keymap("n", "f", "<cmd>NvimTreeFindFileToggle<cr><cr><Up>", opts)
-- window navigation
keymap("n", "<c-h>", "<C-w>h", opts)
keymap("n", "<c-j>", "<C-w>j", opts)
keymap("n", "<c-k>", "<C-w>k", opts)
keymap("n", "<c-l>", "<C-w>l", opts)
keymap("n", "<c-a>", "gg0v$G", opts)
keymap("i", "<c-a>", "<esc>gg0v$G", opts)
keymap("n", "<c-c>", '"+y', opts)
keymap("v", "<c-c>", '"+y', opts)
keymap("x", "<c-c>", '"+y', opts)
keymap("n", "<c-v>", '"+P', opts)
keymap("v", "<c-v>", '"+P', opts)
keymap("i", "<c-v>", "<esc>pa<Left>", opts)
keymap("x", "<c-v>", '"+P', opts)
keymap("n", "<c-z>", "<cmd>undo<CR>", opts)
keymap("x", "<c-z>", "<esc><cmd>undo<CR>", opts)
keymap("v", "<c-z>", "<esc><cmd>undo<CR>", opts)
keymap("i", "<c-z>", "<esc><cmd>undo<CR>", opts)
-- Navigate buffers
keymap("n", "<S-l>", ":bnext<CR>", opts)
keymap("n", "<S-Left>", "<Esc>:bnext<CR>", opts)
keymap("n", "<S-h>", ":bprevious<CR>", opts)
keymap("n", "<S-Right>", "<Esc>:bprevious<CR>", opts)
-- Reordering Bufferline
keymap("n", "<S-PageUp>", "<cmd>BufferLineMovePrev<cr>", opts)
keymap("n", "<S-PageDown>", "<cmd>BufferLineMoveNext<cr>", opts)
-- Press jk fast to exit insert mode
keymap("i", "jk", "<ESC>", opts)
keymap("i", "kj", "<ESC>", opts)
-- Stay in indent mode
keymap("v", "<", "<gv", opts)
keymap("v", ">", ">gv", opts)
-- ALT + l to open terminal and run live-server
keymap("n", "<A-l>", "<cmd>terminal live-server<cr>", opts)
-- close current buffer
keymap("n", "<S-t>", "<cmd>lua require('auto-bufferline.configs.utils').bufremove()<cr>", opts)
-- vim.keymap.set("n", "<leader>ti", function()
-- local api = vim.api
-- local parser_configs = require("nvim-treesitter.parsers").get_parser_configs()
-- local parsers = vim.tbl_keys(parser_configs)
-- table.sort(parsers)
--
-- local choices = {}
-- local lookup = {}
--
-- for _, parser in ipairs(parsers) do
-- local is_installed = #api.nvim_get_runtime_file("parser/" .. parser .. ".so", false) > 0
--
-- local label = (is_installed and "[✓] " or "[✗] ") .. parser
-- table.insert(choices, label)
-- lookup[label] = parser
-- end
--
-- vim.ui.select(choices, {
-- prompt = "Treesitter ([✓]= installed, [✗] = not installed)",
-- }, function(choice)
-- if choice then
-- local parser_name = lookup[choice]
-- if parser_name then
-- vim.cmd("TSInstall " .. parser_name)
-- end
-- end
-- end)
-- end, { desc = "Install Treesitter" })
--
-- vim.keymap.set("n", "<leader>tu", function()
-- local parsers = require("nvim-treesitter.info").installed_parsers()
-- table.sort(parsers)
-- local choices = {}
-- local lookup = {}
--
-- for _, parser in ipairs(parsers) do
-- local label = "[✓] " .. parser
-- table.insert(choices, label)
-- lookup[label] = parser
-- end
--
-- vim.ui.select(choices, {
-- prompt = "Uninstall Treesitter",
-- }, function(choice)
-- if choice then
-- local parser_name = lookup[choice]
-- if parser_name then
-- vim.cmd("TSUninstall " .. parser_name)
-- end
-- end
-- end)
-- end, { desc = "Uninstall Treesitter" })
vim.api.nvim_create_user_command("TSIsInstalled", function()
local parsers = require("nvim-treesitter.info").installed_parsers()
table.sort(parsers)
local choices = {}
local lookup = {}
for _, parser in ipairs(parsers) do
local label = "[✓] " .. parser
table.insert(choices, label)
lookup[label] = parser
end
vim.ui.select(choices, {
prompt = "Uninstall Treesitter",
}, function(choice)
if choice then
local parser_name = lookup[choice]
if parser_name then
vim.cmd("TSUninstall " .. parser_name)
end
end
end)
end, {})