diff options
Diffstat (limited to 'nvim/lua/core')
-rw-r--r-- | nvim/lua/core/autocmds.lua | 98 | ||||
-rw-r--r-- | nvim/lua/core/keymaps.lua | 113 | ||||
-rw-r--r-- | nvim/lua/core/options.lua | 37 |
3 files changed, 248 insertions, 0 deletions
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", "<C-d>", [[<C-\><C-n><cmd>ToggleTerm<CR>]], opts)
+ vim.keymap.set("t", "<C-q>", [[<C-\><C-n><cmd>ToggleTerm<CR>]], opts)
+ vim.keymap.set("t", "jk", [[<C-\><C-n>]], opts)
+ vim.keymap.set("t", "<C-h>", [[<C-\><C-n><C-W>h]], opts)
+ vim.keymap.set("t", "<C-j>", [[<C-\><C-n><C-W>j]], opts)
+ vim.keymap.set("t", "<C-k>", [[<C-\><C-n><C-W>k]], opts)
+ vim.keymap.set("t", "<C-l>", [[<C-\><C-n><C-W>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", "<leader>w", "<cmd>w<cr>", { desc = "Save file" })
+vim.keymap.set("n", "<leader>q", "<cmd>q<cr>", { desc = "Quit" })
+vim.keymap.set("n", "<leader>Q", "<cmd>q!<cr>", { desc = "Force quit" })
+vim.keymap.set("n", "<C-c>", "<cmd>bd<cr>", { desc = "Close buffer" })
+
+-- Quick buffer navigation
+vim.keymap.set("n", "<C-h>", "<C-w>h", { desc = "Move to left window" })
+vim.keymap.set("n", "<C-j>", "<C-w>j", { desc = "Move to bottom window" })
+vim.keymap.set("n", "<C-k>", "<C-w>k", { desc = "Move to top window" })
+vim.keymap.set("n", "<C-l>", "<C-w>l", { desc = "Move to right window" })
+
+-- Quick formatting
+vim.keymap.set("n", "<leader>S", "ggVG=", { desc = "Format entire file" })
+
+-- Quick line operations
+vim.keymap.set("n", "<leader>o", "o<Esc>", { desc = "New line below" })
+vim.keymap.set("n", "<leader>O", "O<Esc>", { desc = "New line above" })
+vim.keymap.set("n", "J", "mzJ`z", { desc = "Join lines and maintain cursor" })
+
+-- Better vertical navigation
+vim.keymap.set("n", "<C-d>", "<C-d>zz", { desc = "Half page down and center" })
+vim.keymap.set("n", "<C-u>", "<C-u>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"}, "<leader>y", [["+y]], { desc = "Copy to system clipboard" })
+vim.keymap.set("n", "<leader>Y", [["+Y]], { desc = "Copy line to system clipboard" })
+vim.keymap.set({"n", "v"}, "<leader>d", [["_d]], { desc = "Delete to void register" })
+vim.keymap.set("x", "<leader>p", [["_dP]], { desc = "Paste over selection" })
+
+-- Quickfix navigation
+vim.keymap.set("n", "<leader>k", "<cmd>lnext<CR>zz", { desc = "Next quickfix item" })
+vim.keymap.set("n", "<leader>j", "<cmd>lprev<CR>zz", { desc = "Previous quickfix item" })
+
+-- Undo remap
+vim.keymap.set("n", "U", "<C-r>", { desc = "Redo" })
+
+-- Search and replace current word
+vim.keymap.set("n", "<leader>s", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]],
+ { desc = "Replace current word" })
+
+-- Terminal keymaps
+vim.keymap.set("n", "<leader>t", "<cmd>ToggleTerm<cr>", { desc = "Toggle terminal" })
+vim.keymap.set({"n", "i"},"<C-r><C-k>", "<cmd>ToggleTermSendCurrentLine<cr>j", { desc = "Send line to terminal" })
+vim.keymap.set("n","<C-r><C-j>", "ggVG:'<,'>ToggleTermSendVisualLines<cr>", { desc = "Send file to terminal" })
+vim.keymap.set("i","<C-r><C-j>", "<Esc>ggVG:'<,'>ToggleTermSendVisualLines<cr><Esc>i", { desc = "Send file to terminal" })
+vim.keymap.set("v","<C-r><C-k>", ":ToggleTermSendVisualLines<cr><Esc>", { desc = "Send selection to terminal" })
+
+-- File browser
+vim.keymap.set("n", "-", "<CMD>Oil<CR>", { desc = "Open parent directory with Oil" })
+
+-- LSP quick diagnostics
+vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, { noremap=true, silent=true, desc = "Show diagnostics" })
+
+-- Python docstring helper
+vim.keymap.set("n", "<leader>dc", ":PythonDocstring<CR>", {
+ silent = true,
+ desc = "Insert Python docstring template"
+})
+
+----------------
+-- INSERT MODE
+----------------
+
+vim.keymap.set("i", "jk", "<Esc>", { desc = "Exit insert mode" })
+vim.keymap.set("i", "<leader>e", "<Space>e", { desc = "Insert e after leader" })
+vim.keymap.set("i", "<C-c>", "<cmd>bd<cr>", { desc = "Close buffer" })
+
+----------------
+-- VISUAL MODE
+----------------
+
+-- Move selected lines
+vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
+vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
+
+-- Telescope keymaps (grouped for related functionality)
+vim.keymap.set("n", "<leader>ff", "<cmd>Telescope find_files theme=dropdown<cr>", { desc = "Find files" })
+vim.keymap.set("n", "<leader>fm", "<cmd>Telescope find_files cwd=D:/Optics/CODEV/Macros theme=dropdown<cr>", { desc = "Find macro files" })
+vim.keymap.set("n", "<leader>fc", "<cmd>Telescope find_files cwd=C:/CODEV202403/macro theme=dropdown<cr>", { desc = "Find CODEV macro files" })
+vim.keymap.set("n", "<leader>fl", "<cmd>Telescope find_files cwd=C:/CODEV202403/lens theme=dropdown<cr>", { desc = "Find lens files" })
+vim.keymap.set("n", "<leader>gg", "<cmd>Telescope live_grep theme=dropdown<cr>", { desc = "Live grep" })
+vim.keymap.set("n", "<leader>gm", "<cmd>Telescope live_grep cwd=D:/Optics/CODEV/Macros theme=dropdown<cr>", { desc = "Grep in macro files" })
+vim.keymap.set("n", "<leader>gc", "<cmd>Telescope live_grep cwd=C:/CODEV202403/macro theme=dropdown<cr>", { desc = "Grep in CODEV macro files" })
+vim.keymap.set("n", "<leader>gl", "<cmd>Telescope live_grep cwd=C:/CODEV202403/lens theme=dropdown<cr>", { desc = "Grep in lens files" })
+vim.keymap.set("n", "<leader>b", "<cmd>Telescope buffers theme=dropdown<cr>", { desc = "List buffers" })
+
+-- Harpoon keymaps
+vim.keymap.set("n", "<leader>a", function() require("harpoon"):list():add() end, { desc = "Add file to harpoon" })
+vim.keymap.set("n", "<C-e>", function() require("harpoon").ui:toggle_quick_menu(require("harpoon"):list()) end, { desc = "Toggle harpoon menu" })
+vim.keymap.set("n", "<leader>h", function() require("harpoon"):list():select(1) end, { desc = "Harpoon file 1" })
+vim.keymap.set("n", "<leader>j", function() require("harpoon"):list():select(2) end, { desc = "Harpoon file 2" })
+vim.keymap.set("n", "<leader>k", function() require("harpoon"):list():select(3) end, { desc = "Harpoon file 3" })
+vim.keymap.set("n", "<leader>l", function() require("harpoon"):list():select(4) end, { desc = "Harpoon file 4" })
+vim.keymap.set("n", "<leader>N", function() require("harpoon"):list():prev() end, { desc = "Previous harpoon file" })
+vim.keymap.set("n", "<leader>P", function() require("harpoon"):list():next() end, { desc = "Next harpoon file" })
+
+-- Other tool keymaps
+vim.keymap.set("n", "<leader>G", vim.cmd.Git, { desc = "Open Git status" })
+vim.keymap.set("n", "<leader>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
|