|
| 1 | +-- NOTE: init.lua gets ran before anything else. |
| 2 | + |
| 3 | +-- NOTE: These 2 need to be set up before any plugins are loaded. |
| 4 | +vim.g.mapleader = ' ' |
| 5 | +vim.g.maplocalleader = ' ' |
| 6 | + |
| 7 | +-- [[ Setting options ]] |
| 8 | +-- See `:help vim.o` |
| 9 | + |
| 10 | +-- Sets how neovim will display certain whitespace characters in the editor. |
| 11 | +-- See `:help 'list'` |
| 12 | +-- and `:help 'listchars'` |
| 13 | +vim.opt.list = true |
| 14 | +vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } |
| 15 | + |
| 16 | +-- Set highlight on search |
| 17 | +vim.opt.hlsearch = true |
| 18 | +vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>') |
| 19 | + |
| 20 | +-- Preview substitutions live, as you type! |
| 21 | +vim.opt.inccommand = 'split' |
| 22 | + |
| 23 | +-- Minimal number of screen lines to keep above and below the cursor. |
| 24 | +vim.opt.scrolloff = 10 |
| 25 | + |
| 26 | +-- Make line numbers default |
| 27 | +vim.wo.number = true |
| 28 | + |
| 29 | +-- Enable mouse mode |
| 30 | +vim.o.mouse = 'a' |
| 31 | + |
| 32 | +-- Indent |
| 33 | +-- vim.o.smarttab = true |
| 34 | +vim.opt.cpoptions:append('I') |
| 35 | +vim.o.expandtab = true |
| 36 | +-- vim.o.smartindent = true |
| 37 | +-- vim.o.autoindent = true |
| 38 | +-- vim.o.tabstop = 4 |
| 39 | +-- vim.o.softtabstop = 4 |
| 40 | +-- vim.o.shiftwidth = 4 |
| 41 | + |
| 42 | +-- stops line wrapping from being confusing |
| 43 | +vim.o.breakindent = true |
| 44 | + |
| 45 | +-- Save undo history |
| 46 | +vim.o.undofile = true |
| 47 | + |
| 48 | +-- Case-insensitive searching UNLESS \C or capital in search |
| 49 | +vim.o.ignorecase = true |
| 50 | +vim.o.smartcase = true |
| 51 | + |
| 52 | +-- Keep signcolumn on by default |
| 53 | +vim.wo.signcolumn = 'yes' |
| 54 | +vim.wo.relativenumber = true |
| 55 | + |
| 56 | +-- Decrease update time |
| 57 | +vim.o.updatetime = 250 |
| 58 | +vim.o.timeoutlen = 300 |
| 59 | + |
| 60 | +-- Set completeopt to have a better completion experience |
| 61 | +vim.o.completeopt = 'menu,preview,noselect' |
| 62 | + |
| 63 | +-- NOTE: You should make sure your terminal supports this |
| 64 | +vim.o.termguicolors = true |
| 65 | + |
| 66 | +vim.g.netrw_liststyle=0 |
| 67 | +vim.g.netrw_banner=0 |
| 68 | +-- [[ Disable auto comment on enter ]] |
| 69 | +-- See :help formatoptions |
| 70 | +vim.api.nvim_create_autocmd("FileType", { |
| 71 | + desc = "remove formatoptions", |
| 72 | + callback = function() |
| 73 | + vim.opt.formatoptions:remove({ "c", "r", "o" }) |
| 74 | + end, |
| 75 | +}) |
| 76 | +-- [[ Highlight on yank ]] |
| 77 | +-- See `:help vim.highlight.on_yank()` |
| 78 | +local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) |
| 79 | +vim.api.nvim_create_autocmd('TextYankPost', { |
| 80 | + callback = function() |
| 81 | + vim.highlight.on_yank() |
| 82 | + end, |
| 83 | + group = highlight_group, |
| 84 | + pattern = '*', |
| 85 | +}) |
| 86 | + |
| 87 | +-- Keymaps for better default experience |
| 88 | +-- See `:help vim.keymap.set()` |
| 89 | +vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv", { desc = 'Moves Line Down' }) |
| 90 | +vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv", { desc = 'Moves Line Up' }) |
| 91 | +vim.keymap.set("n", "<C-d>", "<C-d>zz", { desc = 'Scroll Down' }) |
| 92 | +vim.keymap.set("n", "<C-u>", "<C-u>zz", { desc = 'Scroll Up' }) |
| 93 | +vim.keymap.set("n", "n", "nzzzv", { desc = 'Next Search Result' }) |
| 94 | +vim.keymap.set("n", "N", "Nzzzv", { desc = 'Previous Search Result' }) |
| 95 | +vim.keymap.set("n", "<leader><leader>[", "<cmd>bprev<CR>", { desc = 'Previous buffer' }) |
| 96 | +vim.keymap.set("n", "<leader><leader>]", "<cmd>bnext<CR>", { desc = 'Next buffer' }) |
| 97 | +vim.keymap.set("n", "<leader><leader>l", "<cmd>b#<CR>", { desc = 'Last buffer' }) |
| 98 | +vim.keymap.set("n", "<leader><leader>d", "<cmd>bdelete<CR>", { desc = 'delete buffer' }) |
| 99 | + |
| 100 | +-- Remap for dealing with word wrap |
| 101 | +vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) |
| 102 | +vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) |
| 103 | + |
| 104 | +-- Diagnostic keymaps |
| 105 | +vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) |
| 106 | +vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) |
| 107 | + |
| 108 | +-- Sync clipboard between OS and Neovim. |
| 109 | +-- But it constantly clobbers your system clipboard whenever you delete anything. |
| 110 | +-- See `:help 'clipboard'` |
| 111 | +-- vim.o.clipboard = 'unnamedplus' |
| 112 | +-- You should instead use these keybindings to use the clipboard so that they are still easy to use, but dont conflict |
| 113 | +vim.keymap.set({"v", "x", "n"}, '<leader>y', '"+y', { noremap = true, silent = true, desc = 'Yank to clipboard' }) |
| 114 | +vim.keymap.set({"n", "v", "x"}, '<leader>Y', '"+yy', { noremap = true, silent = true, desc = 'Yank line to clipboard' }) |
| 115 | +vim.keymap.set({'n', 'v', 'x'}, '<leader>p', '"+p', { noremap = true, silent = true, desc = 'Paste from clipboard' }) |
| 116 | +vim.keymap.set('i', '<C-p>', '<C-r><C-p>+', { noremap = true, silent = true, desc = 'Paste from clipboard from within insert mode' }) |
| 117 | +vim.keymap.set("x", "<leader>P", '"_dP', { noremap = true, silent = true, desc = 'Paste over selection without erasing unnamed register' }) |
0 commit comments