153 lines
4.2 KiB
Lua
153 lines
4.2 KiB
Lua
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", "<esc>", function()
|
|
cmd.nohlsearch()
|
|
end, { desc = "Stop the highlighting for the 'hlsearch' option" })
|
|
|
|
keymap_set("c", "<m-h>", "<left>", { desc = "Left in c-mode" })
|
|
keymap_set("c", "<m-l>", "<right>", { desc = "Right in c-mode" })
|
|
|
|
keymap_set("n", "<leader>f", ":find ", { desc = ":find" })
|
|
keymap_set("n", "<leader>b", ":buffer ", { desc = ":buffer" })
|
|
keymap_set("n", "<leader>h", ":help ", { desc = ":help" })
|
|
|
|
keymap_set("n", "<leader>s", function()
|
|
vim.opt_local.spell = not(vim.opt_local.spell:get())
|
|
end, { desc = "Toggle spell" })
|
|
|
|
keymap_set("n", "<leader>m", "<cmd>make<cr>", { desc = ":make" })
|
|
|
|
keymap_set("n", "<leader>d", "<cmd>enew<cr><cmd>bd #<cr>", { desc = "Delete buffer" })
|
|
keymap_set("n", "<leader>D", "<cmd>bd<cr>", { desc = "Delete buffer and close window" })
|
|
|
|
keymap_set("n", "]b", "<cmd>bnext<cr>", { desc = "Next buffer" })
|
|
keymap_set("n", "[b", "<cmd>bprev<cr>", { desc = "Previous buffer" })
|
|
keymap_set("n", "]t", "<cmd>tabnext<cr>", { desc = "Next tab" })
|
|
keymap_set("n", "[t", "<cmd>tabprevious<cr>", { desc = "Previous tab" })
|
|
keymap_set("n", "]q", "<cmd>cnext<cr>zz", { desc = "Next quickfix item" })
|
|
keymap_set("n", "[q", "<cmd>cprev<cr>zz", { desc = "Previous quickfix item" })
|
|
|
|
keymap_set("n", "<leader>co", "<cmd>copen<cr>", { desc = "Open quickfix window" })
|
|
keymap_set("n", "<leader>cc", "<cmd>cclose<cr>", { desc = "Close quickfix window" })
|
|
|
|
keymap_set("n", "<leader>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", "<leader>.", "<cmd>Explore .<cr>",
|
|
{ desc = "Explore current working directory" })
|