Skip to content

Instantly share code, notes, and snippets.

@bdougie
Created February 28, 2026 15:30
Show Gist options
  • Select an option

  • Save bdougie/97a666798c73fa7ed7f0ca12aca2c96e to your computer and use it in GitHub Desktop.

Select an option

Save bdougie/97a666798c73fa7ed7f0ca12aca2c96e to your computer and use it in GitHub Desktop.
Neovim init.lua - migrated from vimrc with space leader and netrw file explorer
-- Leader key: spacebar (set before any mappings)
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-------------------------------------------------
-- Options
-------------------------------------------------
vim.opt.wrap = true
vim.opt.textwidth = 80
vim.opt.autoindent = true
vim.opt.cindent = true
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.hlsearch = true
vim.opt.incsearch = true
vim.opt.termguicolors = true
vim.opt.scrolloff = 8
vim.opt.signcolumn = "yes"
vim.opt.updatetime = 250
vim.opt.splitright = true
vim.opt.splitbelow = true
vim.opt.clipboard = "unnamedplus"
vim.opt.expandtab = true
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.softtabstop = 2
vim.opt.spell = false
vim.opt.background = "dark"
vim.opt.omnifunc = "syntaxcomplete#Complete"
-------------------------------------------------
-- Netrw (built-in file explorer, replaces NERDTree)
-------------------------------------------------
vim.g.netrw_banner = 0 -- hide banner
vim.g.netrw_liststyle = 3 -- tree view
vim.g.netrw_browse_split = 4 -- open in prior window
vim.g.netrw_altv = 1 -- open splits to the right
vim.g.netrw_winsize = 25 -- 25% width
-- Toggle netrw sidebar (NERDTree-style)
vim.keymap.set("n", "<leader>e", ":Lexplore<CR>", { silent = true, desc = "Toggle file explorer" })
-------------------------------------------------
-- File explorer splits (from your vimrc)
-------------------------------------------------
vim.keymap.set("n", "<leader>ss", ":Sex<CR>", { silent = true, desc = "Horizontal split explorer" })
vim.keymap.set("n", "<leader>vv", ":Vex<CR>", { silent = true, desc = "Vertical split explorer" })
-------------------------------------------------
-- Save / Quit
-------------------------------------------------
vim.keymap.set("n", "<leader>w", ":retab<bar>:w<CR>", { desc = "Retab and save" })
vim.keymap.set("n", "<leader>wq", ":retab<bar>:wq<CR>", { desc = "Retab, save, and quit" })
vim.keymap.set("n", "<leader>q", ":q!<CR>", { desc = "Quit without saving" })
-------------------------------------------------
-- Edit config
-------------------------------------------------
vim.keymap.set("n", "<leader>v", ":edit $MYVIMRC<CR>", { desc = "Edit neovim config" })
-------------------------------------------------
-- Copy paths to clipboard
-------------------------------------------------
vim.keymap.set("n", "<leader>ff", ':let @+=expand("%")<CR>', { desc = "Copy relative path" })
vim.keymap.set("n", "<leader>F", ':let @+=expand("%:p")<CR>', { desc = "Copy full path" })
vim.keymap.set("n", "<leader>fl", ':let @+=expand("%:t")<CR>', { desc = "Copy filename" })
-------------------------------------------------
-- Search
-------------------------------------------------
vim.keymap.set("n", "\\", ":grep ", { desc = "Grep search" })
vim.keymap.set("n", "K", ':grep! "\\b<C-R><C-W>\\b"<CR>:cw<CR>', { desc = "Grep word under cursor" })
vim.keymap.set("n", "<leader>2", ":noh<CR>", { silent = true, desc = "Clear search highlights" })
-- Use ripgrep if available (modern ag replacement)
if vim.fn.executable("rg") == 1 then
vim.opt.grepprg = "rg --vimgrep --no-heading --smart-case"
vim.opt.grepformat = "%f:%l:%c:%m"
elseif vim.fn.executable("ag") == 1 then
vim.opt.grepprg = "ag --nogroup --nocolor"
end
-------------------------------------------------
-- Buffers
-------------------------------------------------
vim.keymap.set("n", "<leader>bb", ":ls<CR>", { desc = "List buffers" })
vim.keymap.set("n", "<leader>bl", ":b#<CR>", { desc = "Previous buffer" })
-------------------------------------------------
-- Window layout switching
-------------------------------------------------
vim.keymap.set("n", "<leader>H", ":windo wincmd K<CR>", { silent = true, desc = "Windows to horizontal" })
vim.keymap.set("n", "<leader>h", ":windo wincmd H<CR>", { silent = true, desc = "Windows to vertical" })
-------------------------------------------------
-- Spelling
-------------------------------------------------
vim.keymap.set("n", "<leader>sp", ":set spell!<CR>", { silent = true, desc = "Toggle spell check" })
vim.keymap.set("n", "<leader>sz", "1z=", { silent = true, desc = "Fix spelling" })
-------------------------------------------------
-- Syntax / display
-------------------------------------------------
vim.keymap.set("n", "<leader>1", ":syntax enable<CR>", { desc = "Enable syntax" })
-------------------------------------------------
-- Format JSON
-------------------------------------------------
vim.keymap.set("n", "<leader>3", ":%!python3 -m json.tool<CR>", { desc = "Format JSON" })
-------------------------------------------------
-- Move lines up/down (Ctrl+Shift style)
-------------------------------------------------
vim.keymap.set("n", "<C-S-Up>", ":move .-2<CR>==", { silent = true, desc = "Move line up" })
vim.keymap.set("n", "<C-S-Down>", ":move .+1<CR>==", { silent = true, desc = "Move line down" })
vim.keymap.set("v", "<C-S-Up>", ":move '<-2<CR>gv=gv", { silent = true, desc = "Move selection up" })
vim.keymap.set("v", "<C-S-Down>", ":move '>+1<CR>gv=gv", { silent = true, desc = "Move selection down" })
-------------------------------------------------
-- Move highlighted text left/right
-------------------------------------------------
vim.keymap.set("v", "<", "<gv", { desc = "Indent left and reselect" })
vim.keymap.set("v", ">", ">gv", { desc = "Indent right and reselect" })
-------------------------------------------------
-- Commonly misspelled words
-------------------------------------------------
vim.cmd("iabbrev mispell misspell")
-------------------------------------------------
-- Auto-reload config on save
-------------------------------------------------
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = vim.fn.expand("$MYVIMRC"),
callback = function()
vim.cmd("source $MYVIMRC")
vim.notify("Config reloaded", vim.log.levels.INFO)
end,
desc = "Reload config on save",
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment