-- [[ OPTIONS ]] -- -- Line numbers vim.opt.number = true vim.opt.relativenumber = true -- Block cursor vim.opt.guicursor = "" -- File options vim.opt.undofile = true vim.opt.undodir = os.getenv("HOME") .. "/.vim/nvim_undodir" vim.opt.swapfile = false vim.opt.backup = false vim.opt.fixendofline = false -- Tabs vim.opt.tabstop = 4 vim.opt.softtabstop = 4 vim.opt.shiftwidth = 4 vim.opt.expandtab = true vim.opt.breakindent = true -- Search vim.opt.ignorecase = true vim.opt.smartcase = true vim.opt.incsearch = true vim.keymap.set("n", "", "nohlsearch") -- Columns vim.opt.signcolumn = "yes" vim.opt.textwidth = 78 -- RFC 5322 vim.opt.colorcolumn = "79" -- Auto complete vim.opt.completeopt = { "menuone", "popup" --[[, "noselect" ]] } -- [[ KEYMAPS ]] -- -- Leader key vim.g.mapleader = " " vim.g.maplocalleader = " " -- Clipboard vim.keymap.set({ "n", "v" }, "y", "\"+y") -- Deletions vim.keymap.set("n", "d", "\"_d") vim.keymap.set("v", "d", "\"_d") vim.keymap.set("n", "dm", ":delmarks!") -- Commands vim.keymap.set("n", "x", ":!chmod +x %") vim.keymap.set("n", "cd", ":cd %:h | pwd") -- Move through quick fixes vim.keymap.set("n", "", ":cnext") vim.keymap.set("n", "", ":cprev") -- Tabs vim.keymap.set("n", "tt", ":tabnew") vim.keymap.set("n", "tw", ":tabclose") vim.keymap.set("n", "tn", ":tabnext") vim.keymap.set("n", "tp", ":tabprevious") vim.keymap.set("n", "tf", ":tabfirst") vim.keymap.set("n", "tl", ":tablast") -- Buffers vim.keymap.set("n", "bc", ":enew") vim.keymap.set("n", "n", ":bnext") vim.keymap.set("n", "p", ":bprevious") vim.keymap.set("n", "\\", ":buffer term") vim.keymap.set("t", "", "") -- Run last command in terminal vim.keymap.set("n", "r", ":buffer termi") -- Windows vim.opt.winborder = "rounded" -- Listchars local listchars = { -- eol = "$", tab = "» ", space = "·", trail = "-" } vim.opt.listchars = listchars vim.api.nvim_set_hl(0, "NonText", { fg = "#303030" }) vim.api.nvim_set_hl(0, "Whitespace", { fg = "#303030" }) vim.cmd.match([[TrailingWhitespace /\s\+$/]]) -- Toggle listchars vim.keymap.set("n", "lc", function() vim.wo.list = not vim.wo.list if vim.wo.list then vim.api.nvim_set_hl(0, "TrailingWhitespace", { link = "Error" }) else vim.api.nvim_set_hl(0, "TrailingWhitespace", { link = "Whitespace" }) end end) vim.api.nvim_create_autocmd({ "InsertEnter", "TermEnter" }, { callback = function() vim.opt.listchars.trail = nil vim.api.nvim_set_hl(0, "TrailingWhitespace", { link = "Whitespace" }) end }) vim.api.nvim_create_autocmd({ "InsertLeave", "TermLeave" }, { callback = function() vim.opt.listchars.trail = listchars.space vim.api.nvim_set_hl(0, "TrailingWhitespace", { link = "Error" }) end }) -- [[ PLUGINS ]] -- -- Bootstrap lazy.nvim local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then local lazyrepo = "https://github.com/folke/lazy.nvim.git" local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) if vim.v.shell_error ~= 0 then vim.api.nvim_echo({ { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, { out, "WarningMsg" }, { "\nPress any key to exit..." }, }, true, {}) vim.fn.getchar() os.exit(1) end end vim.opt.rtp:prepend(lazypath) -- Plugins require("lazy").setup({ -- Colorscheme { "blazkowolf/gruber-darker.nvim", opts = { italic = { strings = false, comments = false, } } }, -- Fuzzy finder { "echasnovski/mini.pick", opts = {} }, -- Advanced undo tree { "mbbill/undotree" }, -- Git integration { "tpope/vim-fugitive" }, { "lewis6991/gitsigns.nvim", opts = {} } }) -- Plugin keymaps vim.keymap.set("n", "f", ":Pick files") vim.keymap.set("n", "u", ":UndotreeToggle") vim.keymap.set("n", "gs", ":Git") vim.keymap.set("n", "gt", ":Gitsigns toggle_signs") vim.keymap.set("n", "gp", ":Gitsigns preview_hunk") vim.keymap.set("n", "gb", ":Gitsigns toggle_current_line_blame") -- Colorscheme vim.cmd.colorscheme("gruber-darker")