From 8bd00156cc6c19b312ce282b478f3240305ff580 Mon Sep 17 00:00:00 2001 From: srdusr Date: Tue, 7 Mar 2023 14:19:48 +0200 Subject: Allowed changing cwd if on new repo --- keys.lua | 348 +++++++++++++++++++++++++++++++++++++++++++++ lua/plugins/toggleterm.lua | 37 ++++- 2 files changed, 383 insertions(+), 2 deletions(-) create mode 100644 keys.lua diff --git a/keys.lua b/keys.lua new file mode 100644 index 0000000..72ca59f --- /dev/null +++ b/keys.lua @@ -0,0 +1,348 @@ +--[[ 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", "", ".") + +-- "jj" to exit insert-mode +map("i", "jj", "") + +-- 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 +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", "", "") + +-- 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 +map("c", "", "") +map("c", "", "") +map("c", "", "") +map("c", "", "") + +-- Map Alt+(h/j/k/l) in selection mode to move directional +map("s", "", "") +map("s", "", "") +map("s", "", "") +map("s", "", "") + +-- 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", "dt", "call utils#ToggleDiff()") + +-- Map delete to Ctrl+l +map("i", "", "") + +-- Clear screen +map("n", "", "!clear") + +-- Change file to an executable +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 %') + +-- 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 +--utils.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 # +]]) + +-- 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", "tt", "ToggleTerm") + +-- LazyGit +--map({"n", "t"}, "gg", +map({"n", "t"}, "gg", function() + local config = vim.api.nvim_win_get_config(0) + if config.relative ~= "" then -- is_floating_window? + return "lua LazyGitCurrentFile" + --return "lua require('user.mods').lazygit_at_buffer()" + else + return "lua Lazygit_toggle()" + end +end, {expr = true, replace_keycodes = true}) + +-- Fugitive git bindings +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 = true } 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 notes +map("n", "fm", "lua require('telescope').extensions.media_files.media_files({})") -- find media files +map("n", "fi", "lua require('telescope').extensions.notify.notify({})") -- find media files + +-- FZF +map("n", "fz", "lua require('fzf-lua').files()") + +-- Nvim-tree +map("n", "f", ":NvimTreeToggle", {}) + +-- 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" }) + +-- Dashboard +map("n", "db", "Dashboard") + +-- +map("", "l", require("lsp_lines").toggle, { desc = "Toggle lsp_lines" }) + diff --git a/lua/plugins/toggleterm.lua b/lua/plugins/toggleterm.lua index 5875fc6..0be6548 100644 --- a/lua/plugins/toggleterm.lua +++ b/lua/plugins/toggleterm.lua @@ -2,7 +2,6 @@ local status_ok, toggleterm = pcall(require, "toggleterm") if not status_ok then return end - toggleterm.setup({ --size = function(term) -- if term.direction == "horizontal" then @@ -13,6 +12,7 @@ toggleterm.setup({ --end, --size = 20, open_mapping = [[tt]], + --autochdir = true, hide_numbers = true, shade_filetypes = {}, shade_terminals = false, @@ -92,6 +92,7 @@ local lazygit = Terminal:new({ width = 150, height = 40 }, + ---- Function to run on opening the terminal --on_open = function(term) -- vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', @@ -106,10 +107,42 @@ local lazygit = Terminal:new({ -- vim.cmd("startinsert!") --end }) +local cur_cwd = vim.fn.getcwd() function Lazygit_toggle() - lazygit:toggle() + -- cwd is the root of project. if cwd is changed, change the git. + local cwd = vim.fn.getcwd() + if cwd ~= cur_cwd then + cur_cwd = cwd + lazygit:close() + lazygit = Terminal:new({ + cmd = "lazygit", + dir = "git_dir", + direction = "float", + on_open = float_handler, + float_opts = { + border = { '╒', '═', '╕', '│', '╛', '═', '╘', '│' }, + width = 150, + height = 40 + }, + }) + end + lazygit:toggle() end +--function Lazygit_toggle() +-- lazygit:toggle() +--end + +--vim.keymap.set({"n", "t"}, "gg", function() +-- -- custom function to find the git directory for the current buffer +-- --local git_root = project_utils.git_root() or vim.fn.getcwd() +-- local git_root = vim.fn.getcwd() +-- +-- lazygit.cmd = 'gitui -d ' .. git_root +-- --"lua lazygit_toggle()" +-- lazygit:toggle() +--end, { desc = 'Toggle gitui' }) + local node = Terminal:new({ cmd = "node", hidden = true }) -- cgit v1.2.3