local opt, api, cmd = vim.opt, vim.api, vim.cmd local fn, ui = vim.fn, vim.ui cmd.colorscheme("basic") -- options --------------------------------------------------------------------- opt.undofile = true opt.backup = false opt.writebackup = false opt.mouse = {} opt.title = true opt.shortmess:append({ I = true }) opt.number = true opt.relativenumber = true opt.signcolumn = "number" opt.textwidth = 80 opt.colorcolumn = "+1" opt.showtabline = 2 opt.winbar = "%f%( %h%m%r%y%)" opt.laststatus = 3 local statusline_group = api.nvim_create_augroup("Statusline", {}) local wordcount = fn.wordcount() api.nvim_create_autocmd({ "TextChanged", "WinEnter", "BufEnter" }, { group = statusline_group, callback = function() wordcount = fn.wordcount() end }) local cwd = fn.pathshorten(vim.fn.getcwd()) api.nvim_create_autocmd({ "DirChanged" }, { group = statusline_group, callback = function() cwd = fn.pathshorten(vim.fn.getcwd()) end }) function _G.statusline() return table.concat({ cwd, " %=", " <%b> ", wordcount.visual_chars or wordcount.cursor_chars, "/", wordcount.chars, " ", wordcount.visual_words or wordcount.cursor_words, "/", wordcount.words }) end opt.statusline = "%!v:lua.statusline()" opt.ignorecase = true opt.infercase = true opt.smartcase = true opt.smartindent = true opt.clipboard = "unnamedplus" opt.whichwrap = { ["b"] = true, ["s"] = true, ["h"] = true, ["l"] = true, ["<"] = true, [">"] = true, ["~"] = true, ["["] = true, ["]"] = true } opt.wildoptions = { "fuzzy" } opt.wildignorecase = true opt.path = ".,,**" opt.completeopt = { "menuone", "preview", } local terminal_group = api.nvim_create_augroup("Terminal", {}) api.nvim_create_autocmd({ "TermOpen" }, { group = terminal_group, callback = function() local opt_l = vim.opt_local opt_l.number = false opt_l.relativenumber = false end }) -- keymaps --------------------------------------------------------------------- local keymap_set = vim.keymap.set keymap_set( "n", "", function() cmd.nohlsearch() end, { desc = "Stop the highlighting for the 'hlsearch' option" }) keymap_set("c", "", "", { desc = "Left in c-mode" }) keymap_set("c", "", "", { desc = "Right in c-mode" }) keymap_set("n", "f", ":find ", { desc = ":find" }) keymap_set("n", "b", ":buffer ", { desc = ":buffer" }) keymap_set("n", "h", ":help ", { desc = ":help" }) keymap_set("n", "s", function() vim.opt_local.spell = not(vim.opt_local.spell:get()) end, { desc = "Toggle spell" }) keymap_set("n", "m", "make", { desc = ":make" }) keymap_set("n", "d", "enewbd #", { desc = "Delete buffer" }) keymap_set("n", "D", "bd", { desc = "Delete buffer and close window" }) keymap_set("n", "]b", "bnext", { desc = "Next buffer" }) keymap_set("n", "[b", "bprev", { desc = "Previous buffer" }) keymap_set("n", "]t", "tabnext", { desc = "Next tab" }) keymap_set("n", "[t", "tabprevious", { desc = "Previous tab" }) keymap_set("n", "]q", "cnextzz", { desc = "Next quickfix item" }) keymap_set("n", "[q", "cprevzz", { desc = "Previous quickfix item" }) keymap_set("n", "co", "copen", { desc = "Open quickfix window" }) keymap_set("n", "cc", "cclose", { desc = "Close quickfix window" }) keymap_set("n", "g", function() local pattern ui.input({ prompt = ":vimgrep " }, function(input) if not input then return end if input:match("/.+/[gjf]*") then pattern = input else pattern = ("/%s/g"):format(input) end end) if not pattern then return end local file ui.input({ prompt = (":vimgrep %s "):format(pattern), default = "**/*" }, function(input) if not input then return end file = input end) if not file then return end cmd.vimgrep(pattern, file) end) -- netrw ----------------------------------------------------------------------- local g = vim.g g.netrw_use_errorwindow = 0 g.netrw_banner = 0 g.netrw_bufsettings = "noma nomod nowrap ro nobl" g.netrw_fastbrowse = 0 keymap_set("n", ".", "Explore .", { desc = "Explore current working directory" })