diff --git a/lua/nami/autocmd.lua b/lua/nami/autocmd.lua new file mode 100644 index 0000000..02f16b5 --- /dev/null +++ b/lua/nami/autocmd.lua @@ -0,0 +1,79 @@ +local custom_group = vim.api.nvim_create_augroup('custom', { clear = true }) + +vim.api.nvim_create_autocmd('TextYankPost', { + group = custom_group, + pattern = '*', + callback = function() + vim.highlight.on_yank({ + higroup = 'Visual', + timeout = 100, + }) + end, + desc = 'Highlight on yank', +}) + +-- Remove items from quickfix list. +-- `dd` to delete in Normal +-- `d` to delete Visual selection +local function delete_qf_items() + local mode = vim.api.nvim_get_mode()['mode'] + + local start_idx + local count + + if mode == 'n' then + -- Normal mode + start_idx = vim.fn.line('.') + count = vim.v.count > 0 and vim.v.count or 1 + else + -- Visual mode + local v_start_idx = vim.fn.line('v') + local v_end_idx = vim.fn.line('.') + + start_idx = math.min(v_start_idx, v_end_idx) + count = math.abs(v_end_idx - v_start_idx) + 1 + + -- Go back to normal + vim.api.nvim_feedkeys( + vim.api.nvim_replace_termcodes( + '', -- what to escape + true, -- Vim leftovers + false, -- Also replace ``? + true -- Replace keycodes (like ``)? + ), + 'x', -- Mode flag + false -- Should be false, since we already `nvim_replace_termcodes()` + ) + end + + local qflist = vim.fn.getqflist() + + for _ = 1, count, 1 do + table.remove(qflist, start_idx) + end + + vim.fn.setqflist(qflist, 'r') + vim.fn.cursor(start_idx, 1) +end + +vim.api.nvim_create_autocmd('FileType', { + group = custom_group, + pattern = 'qf', + callback = function() + -- Do not show quickfix in buffer lists. + vim.api.nvim_buf_set_option(0, 'buflisted', false) + + -- Escape closes quickfix window. + vim.keymap.set( + 'n', + '', + 'cclose', + { buffer = true, remap = false, silent = true } + ) + + -- `dd` deletes an item from the list. + vim.keymap.set('n', 'dd', delete_qf_items, { buffer = true }) + vim.keymap.set('x', 'd', delete_qf_items, { buffer = true }) + end, + desc = 'Quickfix tweaks', +}) diff --git a/lua/nami/init.lua b/lua/nami/init.lua index 92dc2d6..0e5d919 100644 --- a/lua/nami/init.lua +++ b/lua/nami/init.lua @@ -1,3 +1,4 @@ require("nami.lazy") require("nami.remap") +require("nami.autocmd") require("nami.set") diff --git a/lua/nami/lazy.lua b/lua/nami/lazy.lua index 7d0a1fa..837d75e 100755 --- a/lua/nami/lazy.lua +++ b/lua/nami/lazy.lua @@ -38,18 +38,23 @@ local plugins = { dependencies = { "nvim-lua/plenary.nvim" } }, "mbbill/undotree", - "tpope/vim-fugitive", - "subnut/nvim-ghost.nvim", - -- "unblevable/quick-scope", - "andweeb/presence.nvim", + { + "tpope/vim-fugitive", + lazy = true + }, + { + "subnut/nvim-ghost.nvim", + lazy = true + }, + { + "andweeb/presence.nvim", + lazy = true + }, "numToStr/Comment.nvim", - -- "echasnovski/mini.align", { 'stevearc/oil.nvim', - -- Optional dependencies dependencies = { { "nvim-mini/mini.icons", opts = {} } }, -- dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons - -- Lazy loading is not recommended because it is very tricky to make it work correctly in all situations. lazy = false, }, { @@ -76,6 +81,7 @@ local plugins = { dependencies = { "nvim-lua/plenary.nvim", }, + lazy = true }, { "goolord/alpha-nvim", diff --git a/lua/nami/remap.lua b/lua/nami/remap.lua index 412e16f..d2d97cd 100644 --- a/lua/nami/remap.lua +++ b/lua/nami/remap.lua @@ -24,7 +24,8 @@ vim.keymap.set("n", "n", "nzzzv") vim.keymap.set("n", "N", "Nzzzv") -- greatest remap ever -vim.keymap.set("x", "p", "\"_dP") +vim.keymap.set("x", "P", "\"_dP") +vim.keymap.set("x", "p", "\"_dp") -- next greatest remap ever : asbjornHaland -- to void register (system) @@ -106,3 +107,5 @@ end -- the QF list vim.keymap.set("n", "dd", del_qf_item, { silent = true, buffer = true, desc = "Remove entry from QF" }) vim.keymap.set("v", "D", del_qf_item, { silent = true, buffer = true, desc = "Remove entry from QF" }) + +vim.keymap.set("n", "", "copen");