From 09d70e1bc0bf1e5c54b3faf2918a3e14c4fc4cfc Mon Sep 17 00:00:00 2001 From: Suleyman Farajli Date: Thu, 19 Jun 2025 01:07:18 +0400 Subject: refactor: improve Neovim config for better readability and functionality - Switch to Lua API options for setting vim options instead of vim.cmd - Add autocmd to trim trailing whitespace on save (except markdown) - Disable auto-comments via autocmd for all filetypes - Enhance and standardize key mappings with noremap and silent flags - Clean up plugin config indentation and comments --- config/nvim/init.lua | 83 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 60 insertions(+), 23 deletions(-) (limited to 'config/nvim/init.lua') diff --git a/config/nvim/init.lua b/config/nvim/init.lua index df90607..ea8a3d2 100644 --- a/config/nvim/init.lua +++ b/config/nvim/init.lua @@ -1,15 +1,14 @@ require("plugins") -vim.cmd("let mapleader = ' '") -vim.cmd("set relativenumber") -vim.cmd("set number") -vim.cmd("colorscheme duskfox") -vim.cmd("set nowrap") -vim.cmd("set clipboard=unnamedplus") -- Use system clipboard -vim.cmd("set background=dark") -vim.cmd("set shm+=I") -- Disable intro message -vim.cmd("autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o") -- Disable auto-comment --- vim.cmd("set list") -- Show spaces tabs etc. +vim.g.mapleader = ' ' +vim.opt.background = "dark" +vim.opt.clipboard = "unnamedplus" -- Use system clipboard +vim.opt.list = true -- Show spaces, tabs, etc. +vim.opt.number = true +vim.opt.relativenumber = true +vim.opt.shortmess:append("I") -- Disable intro message +vim.opt.wrap = false +vim.cmd.colorscheme("duskfox") vim.opt.fillchars = { vert = "|", @@ -22,16 +21,54 @@ vim.opt.fillchars = { foldclose = ">", } -vim.keymap.set('n', '', ':w!') -vim.keymap.set('n', 'q', ':wq!') -vim.keymap.set('n', '', ':tabnew') -vim.keymap.set('n', 'J', ':tabn') -vim.keymap.set('n', 'K', ':tabp') -vim.keymap.set('n', '', ':vsplit') -vim.keymap.set('n', 'H', ':wincmd h') -vim.keymap.set('n', 'L', ':wincmd l') -vim.keymap.set('n', 'e', ':Neotree toggle right') -vim.keymap.set('n', 'o', 'w') -vim.keymap.set('i', '', '') -vim.keymap.set('i', '', '') -vim.keymap.set('i', '', '') +-- Remove trailing whitespace on all lines before saving, excluding markdown files +vim.api.nvim_create_autocmd("BufWritePre", { + pattern = "*", + callback = function() + if vim.bo.filetype == "markdown" then + return + end + vim.cmd([[%s/\s\+$//e]]) + end, +}) + +-- Disable auto-comment +vim.api.nvim_create_autocmd("FileType", { + pattern = "*", + callback = function() + vim.opt_local.formatoptions:remove({ "c", "r", "o" }) + end, +}) + + +-- NOTE: On some terminal emulators, the keybinds +-- and don't work either in normal or insert mode. + +-- Tabs +vim.keymap.set('n', '', 'tabnew' , { noremap = true, silent = true }) +vim.keymap.set('n', 'H' , 'wincmd h', { noremap = true, silent = true }) +vim.keymap.set('n', 'J' , 'tabn' , { noremap = true, silent = true }) +vim.keymap.set('n', 'K' , 'tabp' , { noremap = true, silent = true }) +vim.keymap.set('n', 'L' , 'wincmd l', { noremap = true, silent = true }) + +-- Windows +vim.keymap.set('n', '' , 'split' , { noremap = true, silent = true }) +vim.keymap.set('n', '', 'vsplit', { noremap = true, silent = true }) +vim.keymap.set('n', '' , 'h' , { noremap = true }) +vim.keymap.set('n', '' , 'j' , { noremap = true }) +vim.keymap.set('n', '' , 'k' , { noremap = true }) +vim.keymap.set('n', '' , 'l' , { noremap = true }) + +-- Imitate normal mode in insert mode +vim.keymap.set('i', '' , '' , { noremap = true }) +vim.keymap.set('i', '' , '', { noremap = true }) +vim.keymap.set('i', '' , '' , { noremap = true }) +vim.keymap.set('i', '' , '' , { noremap = true }) +vim.keymap.set('i', '', '' , { noremap = true }) + +-- Plugins +vim.keymap.set('n', 'e', 'Neotree toggle right', { noremap = true, silent = true }) + +-- Other +vim.keymap.set('n', '', 'w!' , { noremap = true, silent = true }) +vim.keymap.set('n', 'q' , 'wq!', { noremap = true, silent = true }) -- cgit v1.2.3