From 102f9a5608cbb7b5553cd0d1862b6bd8e40c8075 Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 11 May 2025 00:43:32 +0200 Subject: refractored neovim config --- nvim/lua/core/autocmds.lua | 98 +++++++++++++++++++++++++++++++++++++++ nvim/lua/core/keymaps.lua | 113 +++++++++++++++++++++++++++++++++++++++++++++ nvim/lua/core/options.lua | 37 +++++++++++++++ 3 files changed, 248 insertions(+) create mode 100644 nvim/lua/core/autocmds.lua create mode 100644 nvim/lua/core/keymaps.lua create mode 100644 nvim/lua/core/options.lua (limited to 'nvim/lua/core') diff --git a/nvim/lua/core/autocmds.lua b/nvim/lua/core/autocmds.lua new file mode 100644 index 0000000..898aeb7 --- /dev/null +++ b/nvim/lua/core/autocmds.lua @@ -0,0 +1,98 @@ +-- Core autocommands +-- Centralized place for all autocommands + +-------------------------------- +-- FILE DETECTION & RELOADING +-------------------------------- + +-- Auto-reload files when changed externally +local file_change_detect = vim.api.nvim_create_augroup("FileChangeDetect", { clear = true }) +vim.api.nvim_create_autocmd({"FocusGained", "BufEnter", "BufWinEnter", "WinEnter", "CursorHold", "CursorHoldI"}, { + group = file_change_detect, + callback = function() + vim.cmd("checktime") + end, +}) + +vim.api.nvim_create_autocmd("FileChangedShellPost", { + group = file_change_detect, + callback = function() + vim.notify("File changed on disk. Buffer reloaded.", vim.log.levels.WARN) + vim.cmd("checktime") + end, +}) + +-------------------------------- +-- TERMINAL BEHAVIOR +-------------------------------- + +-- Terminal settings and keymaps +local terminal_settings = vim.api.nvim_create_augroup("TerminalSettings", { clear = true }) +vim.api.nvim_create_autocmd({"TermOpen", "BufEnter"}, { + group = terminal_settings, + callback = function() + if vim.opt.buftype:get() == "terminal" then + vim.cmd("startinsert") + + -- Terminal keymaps + local opts = { noremap = true, silent = true, buffer = true } + vim.keymap.set("t", "", [[ToggleTerm]], opts) + vim.keymap.set("t", "", [[ToggleTerm]], opts) + vim.keymap.set("t", "jk", [[]], opts) + vim.keymap.set("t", "", [[h]], opts) + vim.keymap.set("t", "", [[j]], opts) + vim.keymap.set("t", "", [[k]], opts) + vim.keymap.set("t", "", [[l]], opts) + end + end, +}) + +-------------------------------- +-- CUSTOM FILETYPES +-------------------------------- + +-- Custom filetype detection +local filetype_group = vim.api.nvim_create_augroup("CustomFileTypes", { clear = true }) + +-- Set up .seq files to use codev syntax +vim.api.nvim_create_autocmd({"BufRead", "BufNewFile"}, { + group = filetype_group, + pattern = "*.seq", + callback = function() + vim.bo.filetype = "seq" + vim.bo.syntax = "codev" + vim.bo.commentstring = "!%s" + end, +}) + +-- Set up .lis files to use codelis syntax +vim.api.nvim_create_autocmd({"BufRead", "BufNewFile"}, { + group = filetype_group, + pattern = "*.lis", + callback = function() + vim.bo.filetype = "lis" + vim.bo.syntax = "codelis" + end, +}) + +-------------------------------- +-- CUSTOM COMMANDS +-------------------------------- + +-- Python docstring helper +vim.api.nvim_create_user_command("PythonDocstring", function() + local docstring = [[""" + +# Information: + +# Arguments: + +# Returns: + +"""]] + -- Insert the docstring at the cursor position + local line = vim.api.nvim_win_get_cursor(0)[1] + vim.api.nvim_buf_set_lines(0, line-1, line-1, false, vim.split(docstring, "\n")) + -- Position cursor at the right spot + vim.api.nvim_win_set_cursor(0, {line+1, 0}) +end, {}) diff --git a/nvim/lua/core/keymaps.lua b/nvim/lua/core/keymaps.lua new file mode 100644 index 0000000..0ab02ff --- /dev/null +++ b/nvim/lua/core/keymaps.lua @@ -0,0 +1,113 @@ +-- Core keymaps +-- General key mappings not tied to specific plugins + +-- Leader key +vim.g.mapleader = " " + +---------------- +-- NORMAL MODE +---------------- + +-- File operations +vim.keymap.set("n", "w", "w", { desc = "Save file" }) +vim.keymap.set("n", "q", "q", { desc = "Quit" }) +vim.keymap.set("n", "Q", "q!", { desc = "Force quit" }) +vim.keymap.set("n", "", "bd", { desc = "Close buffer" }) + +-- Quick buffer navigation +vim.keymap.set("n", "", "h", { desc = "Move to left window" }) +vim.keymap.set("n", "", "j", { desc = "Move to bottom window" }) +vim.keymap.set("n", "", "k", { desc = "Move to top window" }) +vim.keymap.set("n", "", "l", { desc = "Move to right window" }) + +-- Quick formatting +vim.keymap.set("n", "S", "ggVG=", { desc = "Format entire file" }) + +-- Quick line operations +vim.keymap.set("n", "o", "o", { desc = "New line below" }) +vim.keymap.set("n", "O", "O", { desc = "New line above" }) +vim.keymap.set("n", "J", "mzJ`z", { desc = "Join lines and maintain cursor" }) + +-- Better vertical navigation +vim.keymap.set("n", "", "zz", { desc = "Half page down and center" }) +vim.keymap.set("n", "", "zz", { desc = "Half page up and center" }) +vim.keymap.set("n", "n", "nzzzv", { desc = "Next search result and center" }) +vim.keymap.set("n", "N", "Nzzzv", { desc = "Prev search result and center" }) + +-- Clipboard operations +vim.keymap.set({"n", "v"}, "y", [["+y]], { desc = "Copy to system clipboard" }) +vim.keymap.set("n", "Y", [["+Y]], { desc = "Copy line to system clipboard" }) +vim.keymap.set({"n", "v"}, "d", [["_d]], { desc = "Delete to void register" }) +vim.keymap.set("x", "p", [["_dP]], { desc = "Paste over selection" }) + +-- Quickfix navigation +vim.keymap.set("n", "k", "lnextzz", { desc = "Next quickfix item" }) +vim.keymap.set("n", "j", "lprevzz", { desc = "Previous quickfix item" }) + +-- Undo remap +vim.keymap.set("n", "U", "", { desc = "Redo" }) + +-- Search and replace current word +vim.keymap.set("n", "s", [[:%s/\<\>//gI]], + { desc = "Replace current word" }) + +-- Terminal keymaps +vim.keymap.set("n", "t", "ToggleTerm", { desc = "Toggle terminal" }) +vim.keymap.set({"n", "i"},"", "ToggleTermSendCurrentLinej", { desc = "Send line to terminal" }) +vim.keymap.set("n","", "ggVG:'<,'>ToggleTermSendVisualLines", { desc = "Send file to terminal" }) +vim.keymap.set("i","", "ggVG:'<,'>ToggleTermSendVisualLinesi", { desc = "Send file to terminal" }) +vim.keymap.set("v","", ":ToggleTermSendVisualLines", { desc = "Send selection to terminal" }) + +-- File browser +vim.keymap.set("n", "-", "Oil", { desc = "Open parent directory with Oil" }) + +-- LSP quick diagnostics +vim.keymap.set('n', 'e', vim.diagnostic.open_float, { noremap=true, silent=true, desc = "Show diagnostics" }) + +-- Python docstring helper +vim.keymap.set("n", "dc", ":PythonDocstring", { + silent = true, + desc = "Insert Python docstring template" +}) + +---------------- +-- INSERT MODE +---------------- + +vim.keymap.set("i", "jk", "", { desc = "Exit insert mode" }) +vim.keymap.set("i", "e", "e", { desc = "Insert e after leader" }) +vim.keymap.set("i", "", "bd", { desc = "Close buffer" }) + +---------------- +-- VISUAL MODE +---------------- + +-- Move selected lines +vim.keymap.set("v", "J", ":m '>+1gv=gv", { desc = "Move selection down" }) +vim.keymap.set("v", "K", ":m '<-2gv=gv", { desc = "Move selection up" }) + +-- Telescope keymaps (grouped for related functionality) +vim.keymap.set("n", "ff", "Telescope find_files theme=dropdown", { desc = "Find files" }) +vim.keymap.set("n", "fm", "Telescope find_files cwd=D:/Optics/CODEV/Macros theme=dropdown", { desc = "Find macro files" }) +vim.keymap.set("n", "fc", "Telescope find_files cwd=C:/CODEV202403/macro theme=dropdown", { desc = "Find CODEV macro files" }) +vim.keymap.set("n", "fl", "Telescope find_files cwd=C:/CODEV202403/lens theme=dropdown", { desc = "Find lens files" }) +vim.keymap.set("n", "gg", "Telescope live_grep theme=dropdown", { desc = "Live grep" }) +vim.keymap.set("n", "gm", "Telescope live_grep cwd=D:/Optics/CODEV/Macros theme=dropdown", { desc = "Grep in macro files" }) +vim.keymap.set("n", "gc", "Telescope live_grep cwd=C:/CODEV202403/macro theme=dropdown", { desc = "Grep in CODEV macro files" }) +vim.keymap.set("n", "gl", "Telescope live_grep cwd=C:/CODEV202403/lens theme=dropdown", { desc = "Grep in lens files" }) +vim.keymap.set("n", "b", "Telescope buffers theme=dropdown", { desc = "List buffers" }) + +-- Harpoon keymaps +vim.keymap.set("n", "a", function() require("harpoon"):list():add() end, { desc = "Add file to harpoon" }) +vim.keymap.set("n", "", function() require("harpoon").ui:toggle_quick_menu(require("harpoon"):list()) end, { desc = "Toggle harpoon menu" }) +vim.keymap.set("n", "h", function() require("harpoon"):list():select(1) end, { desc = "Harpoon file 1" }) +vim.keymap.set("n", "j", function() require("harpoon"):list():select(2) end, { desc = "Harpoon file 2" }) +vim.keymap.set("n", "k", function() require("harpoon"):list():select(3) end, { desc = "Harpoon file 3" }) +vim.keymap.set("n", "l", function() require("harpoon"):list():select(4) end, { desc = "Harpoon file 4" }) +vim.keymap.set("n", "N", function() require("harpoon"):list():prev() end, { desc = "Previous harpoon file" }) +vim.keymap.set("n", "P", function() require("harpoon"):list():next() end, { desc = "Next harpoon file" }) + +-- Other tool keymaps +vim.keymap.set("n", "G", vim.cmd.Git, { desc = "Open Git status" }) +vim.keymap.set("n", "u", vim.cmd.UndotreeToggle, { desc = "Toggle undo tree" }) +vim.keymap.set("n", "[c", function() require("treesitter-context").go_to_context() end, { desc = "Go to context", silent = true }) diff --git a/nvim/lua/core/options.lua b/nvim/lua/core/options.lua new file mode 100644 index 0000000..b05ad08 --- /dev/null +++ b/nvim/lua/core/options.lua @@ -0,0 +1,37 @@ +-- Core Neovim settings +-- General options and settings + +-- UI settings +vim.opt.termguicolors = true -- True color support +vim.opt.number = true -- Show line numbers +vim.opt.relativenumber = true -- Show relative line numbers +vim.opt.scrolloff = 999 -- Keep cursor centered +vim.opt.splitbelow = true -- Horizontal splits below +vim.opt.splitright = true -- Vertical splits to the right +vim.opt.wrap = true -- Line wrapping +vim.opt.virtualedit = "block" -- Allow cursor beyond text in block mode + +-- Search settings +vim.opt.hlsearch = false -- Don't highlight search results +vim.opt.incsearch = true -- Incremental search +vim.opt.ignorecase = true -- Case insensitive search + +-- Tab settings +vim.opt.tabstop = 4 -- Tab width +vim.opt.softtabstop = 4 -- Soft tab width +vim.opt.shiftwidth = 4 -- Indentation width +vim.opt.expandtab = true -- Use spaces instead of tabs + +-- File management +vim.opt.swapfile = false -- No swap files +vim.opt.backup = false -- No backup files +vim.opt.undodir = os.getenv("USERPROFILE").."/.vim/undodir" -- Undo directory +vim.opt.undofile = true -- Persistent undo history + +-- Performance and usability +vim.opt.updatetime = 50 -- Faster update time +vim.opt.inccommand = "split" -- Live substitution preview + +-- Status line +vim.cmd([[set laststatus=2]]) -- Always show statusline +vim.cmd([[set shortmess=I]]) -- Don't show intro message -- cgit v1.2.3