Add neovim config
This commit is contained in:
5
nvim/lua/config/init.lua
Normal file
5
nvim/lua/config/init.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
require("config.options")
|
||||
require("config.keymaps")
|
||||
require("config.lazy")
|
||||
require("config.lsp")
|
||||
|
||||
124
nvim/lua/config/keymaps.lua
Normal file
124
nvim/lua/config/keymaps.lua
Normal file
@@ -0,0 +1,124 @@
|
||||
-- Setup leader key
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = " "
|
||||
|
||||
local keymap = vim.keymap
|
||||
|
||||
-- Vim modes:
|
||||
-- n Normal mode map. Defined using ':nmap' or ':nnoremap'.
|
||||
-- i Insert mode map. Defined using ':imap' or ':inoremap'.
|
||||
-- v Visual and select mode map. Defined using ':vmap' or ':vnoremap'.
|
||||
-- x Visual mode map. Defined using ':xmap' or ':xnoremap'.
|
||||
-- s Select mode map. Defined using ':smap' or ':snoremap'.
|
||||
-- c Command-line mode map. Defined using ':cmap' or ':cnoremap'.
|
||||
-- o Operator pending mode map. Defined using ':omap' or ':onoremap'.
|
||||
|
||||
-- Reserved firs characters:
|
||||
-- +/- - numbers
|
||||
-- c - [C]lear
|
||||
-- d - [D]iagnostic
|
||||
-- e - File [E]xplorer
|
||||
-- f - [F]ind
|
||||
-- g - [G]it
|
||||
-- h - [H]istory
|
||||
-- l - [L]SP
|
||||
-- n - [N]otifications
|
||||
-- p - [P]anes
|
||||
-- s - [S]ession
|
||||
-- t - [T]abs
|
||||
-- u - [U]i
|
||||
|
||||
-- [C]lear highlits
|
||||
keymap.set("n", "<leader>ch", ":nohl<CR>", { desc = "[C]lear: serch [h]ighlights" })
|
||||
|
||||
-- [D]iagnostic
|
||||
keymap.set("n", "<leader>dl", vim.diagnostic.open_float, { desc = "[D]iagnostic: [l]ine" })
|
||||
keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover Documentation" })
|
||||
keymap.set({ "n", "v" }, "<leader>da", vim.lsp.buf.code_action, { desc = "[D]iagnostic: avalible code [a]ctions" })
|
||||
-- nvim-telescope/telescope.nvim
|
||||
keymap.set("n", "<leader>db", "<cmd>Telescope diagnostics bufnr=0<CR>", { desc = "[D]iagnostic: [b]uffer" })
|
||||
-- folke/trouble.nvim
|
||||
keymap.set("n", "<leader>dw", "<cmd>Trouble diagnostics toggle<CR>", { desc = "[D]iagnostic: Trouble [w]orkspace" })
|
||||
keymap.set("n", "<leader>dc", "<cmd>Trouble diagnostics toggle filter.buf=0<CR>", { desc = "[D]iagnostic: Trouble do[c]ument" })
|
||||
keymap.set("n", "<leader>dq", "<cmd>Trouble quickfix toggle<CR>", { desc = "[D]iagnostic: Trouble [q]uickfix" })
|
||||
|
||||
-- File [E]xplorer
|
||||
-- nvim-tree/nvim-tree.lua
|
||||
keymap.set("n", "<leader>ee", "<cmd>NvimTreeToggle<CR>", { desc = "File [E]xplorer: Toggle file [e]xplorer" })
|
||||
keymap.set("n", "<leader>ef", "<cmd>NvimTreeFindFileToggle<CR>", { desc = "File [E]xplorer: Toggle file explorer on current [f]ile" })
|
||||
keymap.set("n", "<leader>ec", "<cmd>NvimTreeCollapse<CR>", { desc = "File [E]xplorer: [C]ollapse" })
|
||||
keymap.set("n", "<leader>er", "<cmd>NvimTreeRefresh<CR>", { desc = "File [E]xplorer: [R]efresh" })
|
||||
|
||||
-- [F]ind
|
||||
-- nvim-telescope/telescope.nvim
|
||||
keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "[F]ind: [f]iles in cwd" })
|
||||
keymap.set("n", "<leader>fr", "<cmd>Telescope oldfiles<cr>", { desc = "[F]ind: [r]ecent files" })
|
||||
keymap.set("n", "<leader>fs", "<cmd>Telescope live_grep<cr>", { desc = "[F]ind: string in cwd" })
|
||||
keymap.set("n", "<leader>fc", "<cmd>Telescope grep_string<cr>", { desc = "[F]ind: string under [c]ursor in cwd" })
|
||||
-- folke/todo-comments.nvim
|
||||
keymap.set("n", "<leader>ft", "<cmd>TodoTelescope<cr>", { desc = "[F]ind: [t]odos" })
|
||||
-- folke/snacks.nvim
|
||||
keymap.set("n", "<leader>fq", function() Snacks.picker.qflist() end, { desc = "[F]ind: [Q]uickfix list" })
|
||||
|
||||
-- [G]it
|
||||
-- lewis6991/gitsigns.nvim
|
||||
keymap.set("n", "<leader>gs", "<cmd>Gitsigns stage_buffer<CR>", { desc = "[G]it: [s]tage buffer" })
|
||||
keymap.set("n", "<leader>gr", "<cmd>Gitsigns reset_buffer<CR>", { desc = "[G]it: [r]eset buffer" })
|
||||
keymap.set("n", "<leader>gb", "<cmd>Gitsigns blame_line<CR>", { desc = "[G]it: [b]lame line" })
|
||||
keymap.set("n", "<leader>gd", "<cmd>Gitsigns diffthis<CR>", { desc = "[G]it: [d]iff this" })
|
||||
keymap.set("n", "<leader>ghn", "<cmd>Gitsigns nav_hunk next<CR>", { desc = "[G]it [H]unk: [n]ext" })
|
||||
keymap.set("n", "<leader>ghp", "<cmd>Gitsigns nav_hunk prev<CR>", { desc = "[G]it [H]unk: [p]revious" })
|
||||
keymap.set("n", "<leader>ghs", "<cmd>Gitsigns stage_hunk<CR>", { desc = "[G]it [H]unk: [s]tage" })
|
||||
keymap.set("n", "<leader>ghr", "<cmd>Gitsigns reset_hunk<CR>", { desc = "[G]it [H]unk: [r]eset" })
|
||||
keymap.set("n", "<leader>ghv", "<cmd>Gitsigns preview_hunk<CR>", { desc = "[G]it [H]unk: pre[v]iew" })
|
||||
keymap.set("v", "<leader>ghs", function() require("gitsigns").stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, { desc = "[G]it [H]unk: [s]tage" })
|
||||
keymap.set("v", "<leader>ghr", function() require("gitsigns").reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, { desc = "[G]it [H]unk: [r]eset" })
|
||||
keymap.set({ "o", "x" }, "<leader>gh", "<cmd>Gitsigns select_hunk<CR>", { desc = "[G]it [H]unk: select" })
|
||||
|
||||
-- [H]istory
|
||||
-- folke/snacks.nvim
|
||||
keymap.set("n", "<leader>hn", function() Snacks.picker.notifications() end, { desc = "[H]istory: [N]otifications" } )
|
||||
keymap.set("n", "<leader>hc", function() Snacks.picker.command_history() end, { desc = "[H]istory: [C]ommands" } )
|
||||
|
||||
-- [L]SP
|
||||
-- folke/snacks.nvim
|
||||
keymap.set("n", "<leader>lf", function() Snacks.picker.lsp_definitions() end, { desc = "[L]SP: Goto De[f]initions" })
|
||||
keymap.set("n", "<leader>lc", function() Snacks.picker.lsp_declarations() end, { desc = "[L]SP: Goto De[c]larations" })
|
||||
keymap.set("n", "<leader>le", function() Snacks.picker.lsp_references() end, { desc = "[L]SP: Goto R[e]ferences" })
|
||||
keymap.set("n", "<leader>li", function() Snacks.picker.lsp_implementations() end, { desc = "[L]SP: Goto [I]mplementations" })
|
||||
keymap.set("n", "<leader>ly", function() Snacks.picker.lsp_type_definitions() end, { desc = "[L]SP: Goto T[y]pe Definitions" })
|
||||
|
||||
-- [P]anes
|
||||
keymap.set("n", "<leader>pv", "<C-w>v", { desc = "[P]ane: split [v]ertically" })
|
||||
keymap.set("n", "<leader>ph", "<C-w>s", { desc = "[P]ane: split [h]orizontally" })
|
||||
keymap.set("n", "<leader>pe", "<C-w>=", { desc = "[P]ane: Make splits [e]qual size" })
|
||||
keymap.set("n", "<leader>pc", "<cmd>close<CR>", { desc = "[P]ane: [C]lose current split" })
|
||||
-- szw/vim-maximizer
|
||||
keymap.set("n", "<leader>pm", "<cmd>MaximizerToggle<CR>", { desc = "[P]ane: [M]aximize/minimize current split" })
|
||||
|
||||
-- [S]ession
|
||||
-- rmagatti/auto-session
|
||||
keymap.set("n", "<leader>sr", "<cmd>AutoSession restore<CR>", { desc = "[S]ession: [R]estore" })
|
||||
keymap.set("n", "<leader>ss", "<cmd>AutoSession save<CR>", { desc = "[S]ession: [S]ave" })
|
||||
keymap.set("n", "<leader>sf", "<cmd>AutoSession search<CR>", { desc = "[S]ession: [F]ind" })
|
||||
keymap.set("n", "<leader>sd", "<cmd>AutoSession deletePicker<CR>", { desc = "[S]ession: [D]elete" })
|
||||
|
||||
-- [T]abs
|
||||
keymap.set("n", "<leader>to", "<cmd>tabnew<CR>", { desc = "[T]ab: Open new" })
|
||||
keymap.set("n", "<leader>tc", "<cmd>tabclose<CR>", { desc = "[T]ab: [C]lose current" })
|
||||
keymap.set("n", "<leader>tn", "<cmd>tabn<CR>", { desc = "[T]ab: Go to [n]ext" })
|
||||
keymap.set("n", "<leader>tp", "<cmd>tabp<CR>", { desc = "[T]ab: Go to [p]revious" })
|
||||
keymap.set("n", "<leader>tb", "<cmd>tabnew %<CR>", { desc = "[T]ab: Open current buffer in new tab" })
|
||||
|
||||
-- [U]I
|
||||
-- folke/snacks.nvim
|
||||
keymap.set("n", "<leader>ug", function() Snacks.lazygit() end, { desc = "[U]I: Open [L]azyGit" })
|
||||
keymap.set("n", "<leader>ud", function() Snacks.dashboard() end, { desc = "[U]I: Open [D]ashboard" })
|
||||
-- folke/lazy.nvim
|
||||
keymap.set("n", "<leader>ul", "<cmd>Lazy<CR>", { desc = "[U]I: Open [L]azyVim" })
|
||||
|
||||
-- Misc
|
||||
-- VonHeikemen/fine-cmdline.nvim
|
||||
keymap.set("n", ":", "<cmd>FineCmdline<CR>", { desc = "Fine Command Line" })
|
||||
-- folke/which-key.nvim
|
||||
keymap.set("n", "<leader>?", function() require("which-key").show({ global = false }) end, { desc = "Buffer Local Keymaps (which-key)" })
|
||||
29
nvim/lua/config/lazy.lua
Normal file
29
nvim/lua/config/lazy.lua
Normal file
@@ -0,0 +1,29 @@
|
||||
-- https://githup.com/folke/lazy.nvim
|
||||
-- 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)
|
||||
|
||||
-- Setup lazy.nvim
|
||||
require("lazy").setup("plugins", {
|
||||
checker = {
|
||||
enabled = true,
|
||||
notify = false,
|
||||
},
|
||||
change_detection = {
|
||||
notify = false,
|
||||
},
|
||||
})
|
||||
|
||||
30
nvim/lua/config/lsp.lua
Normal file
30
nvim/lua/config/lsp.lua
Normal file
@@ -0,0 +1,30 @@
|
||||
vim.lsp.enable({
|
||||
"gitlabcils",
|
||||
"luals",
|
||||
"terraformls",
|
||||
"yamlls"
|
||||
})
|
||||
|
||||
vim.diagnostic.config({
|
||||
virtual_lines = true,
|
||||
-- virtual_text = true,
|
||||
underline = true,
|
||||
update_in_insert = false,
|
||||
severity_sort = true,
|
||||
float = {
|
||||
border = "rounded",
|
||||
source = true,
|
||||
},
|
||||
signs = {
|
||||
text = {
|
||||
[vim.diagnostic.severity.ERROR] = " ",
|
||||
[vim.diagnostic.severity.WARN] = " ",
|
||||
[vim.diagnostic.severity.INFO] = " ",
|
||||
[vim.diagnostic.severity.HINT] = " ",
|
||||
},
|
||||
numhl = {
|
||||
[vim.diagnostic.severity.ERROR] = "ErrorMsg",
|
||||
[vim.diagnostic.severity.WARN] = "WarningMsg",
|
||||
},
|
||||
},
|
||||
})
|
||||
47
nvim/lua/config/options.lua
Normal file
47
nvim/lua/config/options.lua
Normal file
@@ -0,0 +1,47 @@
|
||||
-- Explorer tree style
|
||||
vim.cmd("let g:netrw_liststyle = 3")
|
||||
|
||||
-- Theme
|
||||
|
||||
local opt = vim.opt
|
||||
|
||||
-- Show string numbers relative to cursor position
|
||||
opt.relativenumber = true
|
||||
-- Show string numper of cursor position
|
||||
opt.number = true
|
||||
|
||||
-- tabs & idents
|
||||
opt.tabstop = 2 -- 2 spaces for tab
|
||||
opt.shiftwidth = 2 -- 2 spaces for ident
|
||||
opt.expandtab = true -- expand tab to spaces
|
||||
opt.autoindent = true -- save indent when start new line
|
||||
|
||||
-- Wrap long strings to fit screen size
|
||||
opt.wrap = true
|
||||
|
||||
-- search
|
||||
opt.ignorecase = true -- ignore case
|
||||
opt.smartcase = true -- case-sensitive when mixed case in search
|
||||
|
||||
-- highlite line with cursor
|
||||
-- opt.cursorline = true
|
||||
|
||||
-- turn on terminal colors
|
||||
opt.termguicolors = true
|
||||
opt.background = "dark"
|
||||
opt.signcolumn = "yes"
|
||||
|
||||
-- backspace
|
||||
opt.backspace = "indent,eol,start" -- allow backspace on indent, end of line or insert mode start position
|
||||
|
||||
-- clipboard
|
||||
opt.clipboard:append("unnamedplus") -- use system clipboard as default register
|
||||
|
||||
-- split windows
|
||||
opt.splitright = true -- split vertical window to the right
|
||||
opt.splitbelow = true -- split horizontal window to the bottom
|
||||
|
||||
-- turn off swapfile
|
||||
opt.swapfile = false
|
||||
|
||||
-- opt.messagesopt = "wait:10000,history:50"
|
||||
Reference in New Issue
Block a user