-- ╭─────────────────────────────────────────────────────────╮ -- │ Overrides │ -- ╰─────────────────────────────────────────────────────────╯ -- ━━━━━━━━━━━━━━━━━━━━━━━━━━ Keymap Overrides ━━━━━━━━━━━━━━━━━━━━━━━ -- Add keymapper function local add_keymap = require('data.func').add_keymap -- Add keymaps for overrides add_keymap(require('data.keys').overrides) -- Replace '...' with '…' (ellipsis) on InsertLeave require('data.func').setup_replace_ellipsis(true) -- Search selected text in visual mode add_keymap('/', '*', 'Search selected text', 'v') -- Use modern cipher instead of rot13 add_keymap(require('data.keys').cipher.hex) -- Help keybinds for _, item in ipairs(require('data.keys').help) do add_keymap(item) end -- Remap Command Mode List require('data.keys').cmd_mode() -- ━━━━━━━━━━━━━━━━━━━━━━━━ Additional Overrides ━━━━━━━━━━━━━━━━━━━━━ -- Disable NeoMiniMap in Termux if vim.g.is_termux then if require('data.func').is_installed('neominimap') then -- Disable NeoMiniMap vim.cmd('Neominimap off') end end -- Allow directional motions to wrap to next line -- vim.cmd('set whichwrap+=h,l') -- Stop snippet when leaving insert mode vim.keymap.set({ 'i', 's' }, '', function() vim.snippet.stop() return '' end, { expr = true, desc = 'Close snippet session' }) -- Swap the behavior of 'p' and 'P' while preserving plugin-defined behaviors local opts = { noremap = false, silent = true, remap = true } vim.keymap.set('n', 'p', 'P', opts) vim.keymap.set('n', 'P', 'p', opts) vim.keymap.set('n', 'q:', function() Pick('command_history') end, opts) vim.api.nvim_create_user_command('LspListClients', function() local clients = vim.lsp.get_clients({ bufnr = vim.api.nvim_get_current_buf() }) if #clients == 0 then print('No LSP attached') else local names = {} for _, client in ipairs(clients) do table.insert(names, client.name) end print('Attached LSP(s): ' .. table.concat(names, ', ')) end end, {}) -- Statuscolumn Tweaks require('config.statuscolumn') -- Macro recording cursor color local api = vim.api -- Store current cursor color local current_cursor_color = api.nvim_get_hl(0, { name = 'Cursor' }).bg api.nvim_create_autocmd('RecordingEnter', { callback = function() api.nvim_set_hl(0, 'Cursor', { bg = '#ff5080' }) end, }) api.nvim_create_autocmd('RecordingLeave', { callback = function() api.nvim_set_hl(0, 'Cursor', { bg = current_cursor_color }) end, }) -- Remap 'q' to 'Q' to reduce accidental macros if pcall(require, 'which-key') then require('which-key').add({ lhs = 'q', rhs = '', mode = 'n', hidden = true, }) else vim.keymap.set('n', 'q', '', { noremap = true }) end vim.keymap.set('n', 'Q', 'q', { noremap = true, desc = 'Record macro' }) vim.keymap.set( 'n', '', 'Q', { noremap = true, desc = 'Replay last register' } ) -- Duplicate and comment lines vim.keymap.set('n', 'ycc', function() vim.cmd('normal! ' .. vim.v.count1 .. 'yy') vim.cmd('normal ' .. vim.v.count1 .. 'gcc') vim.cmd("normal! ']$p") end, { desc = 'Duplicate and comment lines' }) --------------------------------------------------------------------------- -- ╓─────────────────────────────────────────────────────────╖ -- ║ Scroll half a screen with and ║ -- ║ (with count and memory) ║ -- ╙─────────────────────────────────────────────────────────╜ local last_scroll_count = 1 -- Store the last used count -- Define the ScrollDirection type ---@alias ScrollDirection 'up'|'down' --- Scroll half a screen up or down ---@param direction ScrollDirection The direction to scroll in local function scroll(direction) -- Set the count to the provided count or the last used count local count = vim.v.count > 0 and vim.v.count or last_scroll_count -- Remember the count for next time last_scroll_count = count -- To remove the memory feature, uncomment the following line -- count = vim.v.count > 0 and vim.v.count or 1 -- Use current count or default to 1 -- Calculate the number of lines in a half-screen local half_screen = math.floor(vim.api.nvim_win_get_height(0) / 2) -- Generate the key sequence local keys = count * half_screen .. (direction == 'down' and '\x04' or '\x15') -- Execute the key sequence vim.api.nvim_feedkeys( vim.api.nvim_replace_termcodes(keys, true, false, true), 'n', false ) end -- Map the scroll functions to and vim.keymap.set('n', '', function() scroll('down') end, { silent = true }) vim.keymap.set('n', '', function() scroll('up') end, { silent = true }) --------------------------------------------------------------------------- -- Dump floating window info to file vim.keymap.set( 'n', 'fd', require('data.func').dump_floating_window_info, { desc = 'Dump floating window info to file' } ) --------------------------------------------------------------------------- -- Obsidian Project Configuration: local function run_obsidian_config() -- Reduce conceallevel for Obsidian UI vim.o.conceallevel = 2 vim.cmd('Neominimap off') end vim.api.nvim_create_augroup('obsidian_config', { clear = true }) vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufRead', 'BufEnter' }, { group = 'obsidian_config', pattern = vim.fn.expand('~') .. '/vaults/Rootiest Notes/**', callback = run_obsidian_config, }) ---------------------------------------------------------------------------