From 5076d6e45273ac3275983326c217473c18d1aa40 Mon Sep 17 00:00:00 2001 From: srdusr Date: Sun, 23 Jul 2023 23:14:23 +0200 Subject: Add keys again, now with toggleterm horizontal/vertical support --- lua/user/keys.lua | 438 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 438 insertions(+) create mode 100644 lua/user/keys.lua diff --git a/lua/user/keys.lua b/lua/user/keys.lua new file mode 100644 index 0000000..7275ac8 --- /dev/null +++ b/lua/user/keys.lua @@ -0,0 +1,438 @@ +--[[ key.lua ]] +------------- Shorten Function Names -------------- +local keymap = vim.keymap +local map = function(mode, l, r, opts) + opts = opts or {} + opts.silent = true + opts.noremap = true + keymap.set(mode, l, r, opts) +end +local term_opts = { noremap = true, silent = false } + +--------------- Standard Operations --------------- +-- Semi-colon as leader key +vim.g.mapleader = ";" + +-- Jump to next match on line using `.` instead of `;` NOTE: commented out in favour of "ggandor/flit.nvim" +--map("n", ".", ";") + +-- Repeat last command using `` instead of `.` NOTE: commented out in favour of "ggandor/flit.nvim" +--map("n", "", ".") + +-- "jk" to exit insert-mode +map("i", "jk", "") + +-- Reload nvim config +map("n", "", + "luafile ~/.config/nvim/init.lua | :echom ('Nvim config loading...') | :sl! | echo ('')") + + +--------------- Extended Operations --------------- +-- Conditional 'q' to quit on floating/quickfix/help windows otherwise still use it for macros +-- TODO: Have a list of if available on system/packages, example "Zen Mode" to not work on it (quit Zen Mode) +map('n', 'q', function() + local config = vim.api.nvim_win_get_config(0) + if config.relative ~= "" then -- is_floating_window? + return ":silent! close!" + elseif + vim.o.buftype == 'quickfix' then + return ":quit" + elseif + vim.o.buftype == 'help' then + return ":close" + else + return "q" + end +end, { expr = true, replace_keycodes = true }) + +-- Combine buffers list with buffer name +map("n", "b", ":buffers:buffer") + +-- Buffer confirmation +map("n", "y", ":BufferPick") + +-- Map buffer next, prev and delete to +(n/p/d) respectively +map("n", "n", ":bn") +map("n", "p", ":bp") +map("n", "d", ":bd") + +-- List marks +map("n", "m", ":marks") + +-- Messages +map("n", "M", ":messages") + +-- Clear messages + +-- Clear messages or just refresh/redraw the screen +map("n", "u", ":echo '' | redraw") + +-- Unsets the 'last search pattern' register by hitting return +--map("n", "", "!silent :noh") + +-- Toggle set number +map("n", "$", ":NumbersToggle") +map("n", "%", ":NumbersOnOff") + +-- Easier split navigations, just ctrl-j instead of ctrl-w then j +--map("n", "", "") +--map("n", "", "") +--map("n", "", "") +--map("n", "", "") +map("t", "", "") +map("t", "", "") +map("t", "", "") +map("t", "", "") +map("t", "", "") +--map("t", "", "") +--map("n", "", "") +--map("n", "", ":call MyFunc(v:count)") + +-- Split window +map("n", "h", ":split") +map("n", "v", ":vsplit") +map("n", "c", "c") + +-- Resize Panes +map("n", "+", ":resize +5") +map("n", "-", ":resize -5") +map("n", "<", ":vertical resize +5") +map("n", ">", ":vertical resize -5") +map("n", "=", "=") + +-- Map Alt+(h/j/k/l) in insert mode to move directional +map("i", "", "") +map("i", "", "") +map("i", "", "") +map("i", "", "") + +-- Map Alt+(h/j/k/l) in command mode to move directional +vim.api.nvim_set_keymap('c', '', '', { noremap = true }) +vim.api.nvim_set_keymap('c', '', '', { noremap = true }) +vim.api.nvim_set_keymap('c', '', '', { noremap = true }) +vim.api.nvim_set_keymap('c', '', '', { noremap = true }) + +-- Create tab, edit and move between them +map("n", "n", ":tabnew") +map("n", "e", ":tabedit") +map("n", "[", ":tabprev") +map("n", "]", ":tabnext") + +-- "Zoom" a split window into a tab and/or close it +--map("n", ",", ":tabnew %") +--map("n", ".", ":tabclose") + +-- Vim TABs +map("n", "1", "1gt") +map("n", "2", "2gt") +map("n", "3", "3gt") +map("n", "4", "4gt") +map("n", "5", "5gt") +map("n", "6", "6gt") +map("n", "7", "7gt") +map("n", "8", "8gt") +map("n", "9", "9gt") +map("n", "0", "10gt") + +-- Move to the next and previous item in the quickfixlist +--map("n", "]c", "cnext") +--map("n", "[c", "cprevious") + +-- Hitting ESC when inside a terminal to get into normal mode +--map("t", "", [[]]) + +-- Move block (indentation) easily +map("n", "<", "<<", term_opts) +map("n", ">", ">>", term_opts) +map("x", "<", "", ">gv", term_opts) + +-- Set alt+(j/k) to switch lines of texts or simply move them +map("n", "", ':let save_a=@a"add"ap:let @a=save_a') +map("n", "", ':let save_a=@a"add"ap:let @a=save_a') + +-- Search and replace +map("v", "sr", 'y:%s/"//gc') + +-- Toggle Diff +map("n", "td", "call utils#ToggleDiff()") + +-- Toggle Verbose +map("n", "vt", "call utils#VerboseToggle()") + +-- Jump List +map("n", "j", "call utils#GotoJump()") + +-- Map delete to Ctrl+l +map("i", "", "") + +-- Clear screen +map("n", "", "!clear") + +-- Change file to an executable +map("n", "x", + ":lua require('user.mods').Toggle_executable() | :echom ('Toggle executable') | :sl! | echo ('')") +--map("n", "x", ":!chmod +x %") + +-- Paste without replace clipboard +map("v", "p", '"_dP') + +-- Swap two pieces of text, use x to cut in visual mode, then use Ctrl-x in +-- visual mode to select text to swap with +--map("v", "", "`.``gvP``P") + +-- Change Working Directory to current project +map("n", "cd", ":cd %:p:h:pwd") + +-- Open the current file in the default program (on Mac this should just be just `open`) +map('n', 'o', ':!xdg-open %') + +-- URL handling +if vim.fn.has("mac") == 1 then + map("", "gx", 'call jobstart(["open", expand("")], {"detach": v:true})', {}) +elseif vim.fn.has("unix") == 1 then + map("", "gx", 'call jobstart(["xdg-open", expand("")], {"detach": v:true})', {}) +elseif vim.fn.has("wsl") == 1 then + map("", "gx", 'call jobstart(["wslview", expand("")], {"detach": v:true})', {}) +else + map[''].gx = { 'lua print("Error: gx is not supported on this OS!")' } +end + +-- Substitute globally and locally in the selected region. +map("n", "ss", ":%s//g") +map("v", "ss", ":s//g") + +-- Toggle completion +map("n", "tc", ":lua require('user.mods').toggle_completion()") + +-- Disable default completion. +map('i', '', '') +map('i', '', '') + +-- Set line wrap +map("n", "", function() + local wrap_status = vim.api.nvim_exec("set wrap ?", true) + + if wrap_status == "nowrap" then + vim.api.nvim_command("set wrap linebreak") + print("Wrap enabled") + else + vim.api.nvim_command("set wrap nowrap") + print("Wrap disabled") + end +end, { silent = true }) + +-- Toggle between folds +--utils.map("n", "", "&foldlevel ? 'zM' : 'zR'", { expr = true }) + +-- Use space to toggle fold +map("n", "", "za") + +-- Make a copy of current file +--vim.cmd([[ +-- map s :up \| saveas! %:p:r-=strftime("%y.%m.%d-%H:%M")-bak.=expand("%:e") \| 3sleep \| e # +--]]) +map('n', '.b', ':!cp % %.backup') + + +-- Toggle transparency +map('n', 'tb', ':call utils#Toggle_transparent_background()') + +-- Toggle zoom +map("n", "z", ":call utils#ZoomToggle()") +map("n", "z", "|_") + +-- Toggle statusline +map('n', '', ':call ToggleHiddenAll()') + +-- Open last closed buffer +map("n", "", ":call OpenLastClosed()") + + +---------------- Plugin Operations ---------------- +-- Packer +map("n", "Pc", "PackerCompile") +map("n", "Pi", "PackerInstall") +map("n", "Ps", "PackerSync") +map("n", "PS", "PackerStatus") +map("n", "Pu", "PackerUpdate") + +-- Tmux navigation (aserowy/tmux.nvim) +map('n', '', 'NavigatorLeft') +map('n', '', 'NavigatorRight') +map('n', '', 'NavigatorUp') +map('n', '', 'NavigatorDown') + +-- ToggleTerm +map({ "n", "t" }, "tt", "ToggleTerm") +map({ "n", "t" }, "th", "lua Horizontal_term_toggle()") +map({ "n", "t" }, "tv", "lua Vertical_term_toggle()") + +-- LazyGit +map({ "n", "t" }, "gg", "lua Lazygit_toggle()") + +map('n', 'tg', 'lua Gh_dash()') + +-- Fugitive git bindings +map("n", "gs", vim.cmd.Git) +map("n", "ga", ":Git add %:p") +--map("n", "gs", ":Gstatus") +map("n", "gc", ":Gcommit -v -q") +map("n", "gt", ":Gcommit -v -q %:p") +--map("n", "gd", ":Gdiff") +map("n", "ge", ":Gedit") +--map("n", "gr", ":Gread") +map("n", "gw", ":Gwrite") +map("n", "gl", ":silent! Glog:bot copen") +--map("n", "gp", ":Ggrep") +--map("n", "gp", ":Git push") +--map("n", "gb", ":Gblame") +map("n", "gm", ":Gmove") +--map("n", "gb", ":Git branch") +--map("n", "go", ":Git checkout") +--map("n", "gps", ":Dispatch! git push") +--map("n", "gpl", ":Dispatch! git pull") +-- map[""] = { "ToggleTerm", desc = "Toggle terminal" } +-- map["tn"] = { function() toggle_term_cmd "node" end, desc = "ToggleTerm node" } +-- map["tu"] = { function() toggle_term_cmd "ncdu" end, desc = "ToggleTerm NCDU" } +-- map["tt"] = { function() toggle_term_cmd "htop" end, desc = "ToggleTerm htop" } +-- map["tp"] = { function() toggle_term_cmd "python" end, desc = "ToggleTerm python" } +-- map["tl"] = { function() toggle_term_cmd "lazygit" end, desc = "ToggleTerm lazygit" } +-- map["tf"] = { "ToggleTerm direction=float", desc = "ToggleTerm float" } +-- map["th"] = { "ToggleTerm size=10 direction=horizontal", desc = "ToggleTerm horizontal split" } +-- map["tv"] = { "ToggleTerm size=80 direction=vertical", desc = "ToggleTerm vertical split" } +--end + +-- Telescope +map("n", "ff", function() require("telescope.builtin").find_files { hidden = true, no_ignore = false } end) -- find all files +--map("n", "fF", "lua require('telescope.builtin').find_files()") -- find files with hidden option +map("n", "fg", "lua require('telescope.builtin').live_grep()") +map("n", "fb", "lua require('telescope.builtin').buffers()") +map("n", "fh", "lua require('telescope.builtin').help_tags()") +map("n", "fc", "lua require('telescope.builtin').commands()") +map("n", "ffc", "lua require('telescope.builtin').current_buffer_fuzzy_find()") +map("n", "cf", "Telescope changed_files") +map("n", "fp", "Telescope pickers") +map("n", "fr", "lua require('telescope.builtin').registers({})") -- registers picker +map("n", "fd", "lua require('telescope.builtin').diagnostics()") +map("n", "fk", "lua require('telescope.builtin').keymaps()") +map("n", "fn", [[lua require'plugins.telescope'.find_notes()]]) -- find notes +map("n", "fgn", [[lua require'plugins.telescope'.grep_notes()]]) -- search notes +map("n", "f.", [[lua require'plugins.telescope'.find_configs()]]) -- find configs +map("n", "fs", [[lua require'plugins.telescope'.find_scripts()]]) -- find scripts +map("n", "fw", [[lua require'plugins.telescope'.find_projects()]]) -- find projects +map("n", "fm", "lua require('telescope').extensions.media_files.media_files({})") -- find media files +map("n", "fi", "lua require('telescope').extensions.notify.notify({})") -- find notifications +--map("n", "f/", "lua require('plugins.telescope').curbuf()") -- find files with hidden option +map("n", "fF", ":cd %:p:h:pwdlua require('user.mods').findFilesInCwd()", + { noremap = true, silent = true, desc = "Find files in cwd" }) + +-- FZF +map("n", "fz", "lua require('fzf-lua').files()") + +-- Nvim-tree +map("n", "f", ":NvimTreeToggle", {}) + +-- Undotree +map('n', 'u', vim.cmd.UndotreeToggle) + +-- Markdown-preview +map("n", "md", "MarkdownPreviewToggle") +map("n", "mg", "Glow") + +-- Autopairs +map("n", "ww", "lua require('user.mods').Toggle_autopairs()") + +-- Zen-mode toggle +map("n", "zm", "ZenMode | :echom ('Zen Mode') | :sl! | echo ('')") + +-- Vim-rooter +map("n", "ro", "Rooter | :echom ('cd to root/project directory') | :sl! | echo ('')", term_opts) + +-- Trouble (UI to show diagnostics) +map("n", "t", "TroubleToggle") +map("n", "tw", "TroubleToggle workspace_diagnostics") +map("n", "td", "TroubleToggle document_diagnostics") +map("n", "tq", "TroubleToggle quickfix") +map("n", "tl", "TroubleToggle loclist") +map("n", "gR", "TroubleToggle lsp_references") + +-- Replacer +map('n', 'qr', ':lua require("replacer").run()') + +-- Quickfix +map("n", "q", function() + if vim.fn.getqflist({ winid = 0 }).winid ~= 0 then + require('plugins.quickfix').close() + else + require('plugins.quickfix').open() + --require("quickfix").open() + end +end, { desc = "Toggle quickfix window" }) + +-- Dap (debugging) +local dap_ok, dap = pcall(require, "dap") +local dap_ui_ok, ui = pcall(require, "dapui") + +if not (dap_ok and dap_ui_ok) then + require("notify")("nvim-dap or dap-ui not installed!", "warning") + return +end + +vim.fn.sign_define('DapBreakpoint', { text = '🐞' }) + +-- Start debugging session +map("n", "ds", function() + dap.continue() + ui.toggle({}) + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("=", false, true, true), "n", false) -- Spaces buffers evenly +end) + +-- Set breakpoints, get variable values, step into/out of functions, etc. +map("n", "dC", dap.continue) +--map("n", "dC", dap.close) +--map("n", "dt", dap.terminate) +map("n", "dt", ui.toggle) +map("n", "dd", function() dap.disconnect({ terminateDebuggee = true }) end) +map("n", "dn", dap.step_over) +map("n", "di", dap.step_into) +map("n", "do", dap.step_out) +map("n", "db", dap.toggle_breakpoint) +map("n", "dB", function() + dap.clear_breakpoints() + require("notify")("Breakpoints cleared", "warn") +end) +map("n", "dl", require("dap.ui.widgets").hover) +map("n", "de", function() require("dapui").float_element() end, + { desc = "Open Element" }) +map("n", "dq", function() + require("dapui").close() + require("dap").repl.close() + local session = require("dap").session() + if session then + require("dap").terminate() + end + require("nvim-dap-virtual-text").refresh() +end, { desc = "Terminate Debug" }) +map("n", "dc", function() + require("telescope").extensions.dap.commands() +end, { desc = "DAP-Telescope: Commands" }) +--vim.keymap.set("n", "B", ":lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))") +--vim.keymap.set("v", "B", ":lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))") +--vim.keymap.set("n", "lp", ":lua require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))") +--vim.keymap.set("n", "dr", ":lua require'dap'.repl.open()") + +-- Close debugger and clear breakpoints +--map("n", "de", function() +-- dap.clear_breakpoints() +-- ui.toggle({}) +-- dap.terminate() +-- vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("=", false, true, true), "n", false) +-- require("notify")("Debugger session ended", "warn") +--end) + +-- Dashboard +map("n", "", "Dashboard") + +-- Lsp Lines toggle +map("", "l", require("lsp_lines").toggle, { desc = "Toggle lsp_lines" }) -- cgit v1.2.3