Totally revamped Config files
This commit is contained in:
47
nvim/lua/config/lazy.lua
Normal file
47
nvim/lua/config/lazy.lua
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
-- ~/.config/nvim/lua/config/lazy.lua
|
||||||
|
-- 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({
|
||||||
|
spec = {
|
||||||
|
{ import = "plugins" },
|
||||||
|
},
|
||||||
|
defaults = {
|
||||||
|
lazy = false,
|
||||||
|
version = false,
|
||||||
|
},
|
||||||
|
install = { colorscheme = { "gruvbox" } },
|
||||||
|
checker = { enabled = false },
|
||||||
|
change_detection = {
|
||||||
|
notify = false,
|
||||||
|
},
|
||||||
|
ui = {
|
||||||
|
backdrop = 100,
|
||||||
|
},
|
||||||
|
performance = {
|
||||||
|
rtp = {
|
||||||
|
disabled_plugins = {
|
||||||
|
"gzip",
|
||||||
|
"tarPlugin",
|
||||||
|
"tohtml",
|
||||||
|
"tutor",
|
||||||
|
"zipPlugin",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -1,134 +1,157 @@
|
|||||||
|
-- # vim:fileencoding=utf-8:foldmethod=marker
|
||||||
|
|
||||||
local set = vim.opt
|
local set = vim.opt
|
||||||
local opt = { noremap = true }
|
local opt = { noremap = true }
|
||||||
local opts = { noremap = true, silent = true }
|
local opts = { noremap = true, silent = true }
|
||||||
local term_opts = { silent = true }
|
local term_opts = { silent = true }
|
||||||
|
|
||||||
-- shorten function name
|
|
||||||
local keymap = vim.api.nvim_set_keymap
|
local keymap = vim.api.nvim_set_keymap
|
||||||
|
|
||||||
-- Modes
|
-- {{{ Leader Key (moved to init.lua)
|
||||||
-- normal_mode = 'n',
|
-- vim.g.mapleader = " " -- set <Space> as leader key
|
||||||
-- insert_mode = 'i', visual_mode = 'v', visual_block_mode = 'x',
|
-- vim.g.maplocalleader = " " -- set <Space> as local leader key
|
||||||
-- term_mode = 't',
|
-- }}}
|
||||||
-- command_mode = 'c',
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-- {{{ Basic Mappings
|
||||||
-- set space as leader key
|
keymap("n", ";", ":", opt) -- remap ; to :
|
||||||
vim.g.mapleader = " " -- Set space as the leader key
|
keymap("n", ":", ";", opt) -- remap : to ;
|
||||||
vim.g.maplocalleader = " " -- Optional: set local leader key to space as well
|
|
||||||
-- switch colon to semicolon
|
|
||||||
keymap("n", ";", ":", opt)
|
|
||||||
keymap("n", ":", ";", opt)
|
|
||||||
|
|
||||||
-- no arrows, move the vim way
|
keymap("n", "<leader>w", ":w<cr>", opts) -- save
|
||||||
-- keymap("n", "<up>", "<nop>", opts)
|
keymap("n", "<leader>q", ":q<cr>", opts) -- quit
|
||||||
-- keymap("n", "<down>", "<nop>", opts)
|
keymap("n", "<leader>wq", ":wq<cr>", opts) -- save and quit
|
||||||
-- keymap("n", "<left>", "<nop>", opts)
|
keymap("n", "<leader>W", ":w!<cr>", opts) -- force save
|
||||||
-- keymap("n", "<right>", "<nop>", opts)
|
keymap("n", "<leader>Q", ":q!<cr>", opts) -- force quit
|
||||||
-- keymap("i", "<up>", "<nop>", opts)
|
keymap("n", "<leader>WQ", ":wq!<cr>", opts) -- force save and quit
|
||||||
-- keymap("i", "<down>", "<nop>", opts)
|
-- }}}
|
||||||
-- keymap("i", "<left>", "<nop>", opts)
|
|
||||||
-- keymap("i", "<right>", "<nop>", opts)
|
|
||||||
|
|
||||||
-- lazy write / quit
|
-- {{{ Navigation
|
||||||
keymap("n", "<leader>w", ":w<cr>", opts)
|
keymap("n", "j", "gj", opts) -- move visually down wrapped lines
|
||||||
keymap("n", "<leader>q", ":q<cr>", opts)
|
keymap("n", "k", "gk", opts) -- move visually up wrapped lines
|
||||||
keymap("n", "<leader>wq", ":wq<cr>", opts)
|
|
||||||
keymap("n", "<leader>W", ":w!<cr>", opts)
|
|
||||||
keymap("n", "<leader>Q", ":q!<cr>", opts)
|
|
||||||
keymap("n", "<leader>WQ", ":wq!<cr>", opts)
|
|
||||||
|
|
||||||
-- navigate properly when lines are wrapped
|
-- Keep arrow key navigation (non-standard but you requested it)
|
||||||
keymap("n", "j", "gj", opts)
|
keymap("n", "<Left>", "<C-w>h", opts) -- move to left window
|
||||||
keymap("n", "k", "gk", opts)
|
keymap("n", "<Right>", "<C-w>l", opts) -- move to right window
|
||||||
|
keymap("n", "<Up>", "<C-w>k", opts) -- move to upper window
|
||||||
|
keymap("n", "<Down>", "<C-w>j", opts) -- move to lower window
|
||||||
|
|
||||||
-- toggle linenumber
|
keymap("n", "<s-l>", ":bnext<cr>", opts) -- next buffer
|
||||||
vim.keymap.set("n", "<leader>n", function()
|
keymap("n", "<s-h>", ":bprevious<cr>", opts) -- previous buffer
|
||||||
if vim.wo.number and vim.wo.relativenumber then
|
-- }}}
|
||||||
vim.wo.number = false
|
|
||||||
vim.wo.relativenumber = false
|
-- {{{ Window Splitting
|
||||||
elseif vim.wo.number then
|
keymap("n", "<leader>sv", ":vsplit<cr>", opts) -- split vertically
|
||||||
vim.wo.relativenumber = true
|
keymap("n", "<leader>sh", ":split<cr>", opts) -- split horizontally
|
||||||
else
|
keymap("n", "<leader>sc", ":close<cr>", opts) -- close current split
|
||||||
vim.wo.number = true
|
keymap("n", "<leader>so", ":only<cr>", opts) -- close all other splits
|
||||||
end
|
-- }}}
|
||||||
|
|
||||||
|
-- {{{ Window Resizing
|
||||||
|
keymap("n", "<leader>+", ":resize +5<cr>", opts) -- increase window height
|
||||||
|
keymap("n", "<leader>-", ":resize -5<cr>", opts) -- decrease window height
|
||||||
|
keymap("n", "<leader><", ":vertical resize -5<cr>", opts) -- decrease window width
|
||||||
|
keymap("n", "<leader>>", ":vertical resize +5<cr>", opts) -- increase window width
|
||||||
|
keymap("n", "<leader>=", "<C-w>=", opts) -- equalize window sizes
|
||||||
|
-- }}}
|
||||||
|
|
||||||
|
-- {{{ Visual Mode / Text, Clipboard
|
||||||
|
keymap("v", ">", ">gv", opts) -- indent right, stay in visual mode
|
||||||
|
keymap("v", "<", "<gv", opts) -- indent left, stay in visual mode
|
||||||
|
|
||||||
|
keymap("x", "<s-j>", ":move '>+1<CR>gv-gv", opts) -- move selected block down
|
||||||
|
keymap("x", "<s-k>", ":move '<-2<CR>gv-gv", opts) -- move selected block up
|
||||||
|
|
||||||
|
keymap("n", "Q", "gq", opts) -- format paragraph
|
||||||
|
keymap("x", "Q", "gq", opts) -- format selection
|
||||||
|
|
||||||
|
keymap("x", "Y", '"+y', opt) -- yank to system clipboard
|
||||||
|
|
||||||
|
keymap("n", "<space><space>", [[:%s/\<<c-r>=expand("<cword>")<cr>\>/]], opt) -- replace word under cursor
|
||||||
|
-- }}}
|
||||||
|
|
||||||
|
-- {{{ Editing / Behavior
|
||||||
|
keymap("n", "q", "<nop>", opts) -- disable q (record macro)
|
||||||
|
keymap("n", "qq", "q", opts) -- if you really want to record macro use qq
|
||||||
|
|
||||||
|
keymap("n", "c", '"_c', opts) -- change without yanking to default register
|
||||||
|
keymap("n", "C", '"_C', opts) -- change line without yanking to default register
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>n", function() -- toggle line numbers
|
||||||
|
if vim.wo.number and vim.wo.relativenumber then
|
||||||
|
vim.wo.number = false
|
||||||
|
vim.wo.relativenumber = false
|
||||||
|
elseif vim.wo.number then
|
||||||
|
vim.wo.relativenumber = true
|
||||||
|
else
|
||||||
|
vim.wo.number = true
|
||||||
|
end
|
||||||
end, { desc = "Toggle line number modes" })
|
end, { desc = "Toggle line number modes" })
|
||||||
|
|
||||||
-- maintaining visual mode after shifting > and <
|
keymap("n", "<leader>c", ":set cursorcolumn! cursorline! <cr>", opts) -- toggle cursor column and line
|
||||||
keymap("v", ">", ">gv", opts)
|
|
||||||
keymap("v", "<", "<gv", opts)
|
|
||||||
|
|
||||||
-- -- move text up and down in visual block mode
|
keymap("n", "<esc>", ":nohlsearch<cr><esc>", opts) -- clear search highlight
|
||||||
keymap("x", "<s-j>", ":move '>+1<CR>gv-gv", opts)
|
-- }}}
|
||||||
keymap("x", "<s-k>", ":move '<-2<CR>gv-gv", opts)
|
|
||||||
|
|
||||||
-- navigate buffers
|
-- {{{ Spellcheck
|
||||||
keymap("n", "<s-l>", ":bnext<cr>", opts)
|
keymap("n", "<leader>se", ":setlocal spell! spelllang=en_us<cr>", opts) -- toggle English spell check
|
||||||
keymap("n", "<s-h>", ":bprevious<cr>", opts)
|
keymap("n", "<leader>sd", ":setlocal spell! spelllang=de_at<cr>", opts) -- toggle Austrian German spell check
|
||||||
|
keymap("n", "<leader>ss", ":setlocal spell! spelllang=es<cr>", opts) -- toggle Spanish spell check
|
||||||
|
-- }}}
|
||||||
|
|
||||||
-- scrolling command-line history
|
-- {{{ Timestamp / Date
|
||||||
keymap("c", "<c-j>", "<c-n>", opts)
|
keymap("n", "<leader>dt", [[i<c-r>=strftime("%d.%m.%Y")<cr><space>]], opts) -- insert current date
|
||||||
keymap("c", "<c-k>", "<c-p>", opts)
|
keymap("n", "<leader>tt", [[i<c-r>=strftime("%H:%M")<cr><space>]], opts) -- insert current time
|
||||||
|
-- }}}
|
||||||
|
|
||||||
-- open the current file in the default program
|
-- {{{ External / System
|
||||||
keymap("n", "<leader>x", [[:!xdg-open %<cr><cr>]], opts)
|
keymap("n", "<leader>x", [[:!open %<cr><cr>]], opts) -- open current file with system default app
|
||||||
|
|
||||||
-- -- no ex mode for me - Q reformats long lines (auto-wrap)
|
keymap("c", "w!!", [[w !sudo tee %]], opt) -- save file with sudo
|
||||||
keymap("n", "Q", "gq", opts)
|
-- }}}
|
||||||
keymap("x", "Q", "gq", opts)
|
|
||||||
|
|
||||||
-- prevent accidentally record functionality
|
-- {{{ Diff / Git
|
||||||
keymap("n", "q", "<nop>", opts)
|
keymap("n", "<leader>gd", ":Gvdiffsplit<cr>", opts) -- git diff split (requires fugitive)
|
||||||
keymap("n", "qq", "q", opts)
|
keymap("n", "<leader>gs", ":Git<cr>", opts) -- open git status tree (requires fugitive)
|
||||||
|
keymap("n", "<leader>gr", ":terminal git log --graph --oneline --decorate --all<CR>i", opts) -- show git log graph in terminal
|
||||||
|
|
||||||
-- redirect change operations to blackhole avoid spoiling 'y' register content
|
-- GitSigns toggles
|
||||||
keymap("n", "c", '"_c', opts)
|
vim.keymap.set('n', '<leader>gt', function() require('gitsigns').toggle_signs() end, { desc = 'Toggle git signs' })
|
||||||
keymap("n", "C", '"_C', opts)
|
vim.keymap.set('n', '<leader>gb', function() require('gitsigns').toggle_current_line_blame() end, { desc = 'Toggle git blame' })
|
||||||
|
vim.keymap.set('n', '<leader>gx', function() require('gitsigns').toggle_deleted() end, { desc = 'Toggle git deleted' })
|
||||||
|
vim.keymap.set('n', '<leader>gn', function() require('gitsigns').toggle_numhl() end, { desc = 'Toggle git number highlights' })
|
||||||
|
vim.keymap.set('n', '<leader>gc', function() require('gitsigns').toggle_linehl() end, { desc = 'Toggle git line colors' })
|
||||||
|
|
||||||
-- toggle cursorcolumn
|
-- LSP diagnostic toggle
|
||||||
keymap("n", "<leader>c", ":set cursorcolumn! cursorline! <cr>", opts)
|
vim.keymap.set('n', '<leader>ld', function()
|
||||||
|
local config = vim.diagnostic.config()
|
||||||
|
vim.diagnostic.config({
|
||||||
|
virtual_text = not config.virtual_text,
|
||||||
|
signs = not config.signs,
|
||||||
|
underline = not config.underline,
|
||||||
|
})
|
||||||
|
end, { desc = 'Toggle LSP diagnostics' })
|
||||||
|
|
||||||
-- clear highlighting from the search
|
-- Toggle fold column
|
||||||
keymap("n", "<esc>", ":nohlsearch<cr><esc>", opts)
|
vim.keymap.set("n", "<leader>un", function()
|
||||||
|
vim.wo.foldcolumn = vim.wo.foldcolumn == "0" and "1" or "0"
|
||||||
|
end, { desc = "Toggle fold column" })
|
||||||
|
|
||||||
-- toggle spell checking
|
keymap("n", "<leader>si", ":source $MYVIMRC<CR>", opts) -- source init.lua ($MYVIMRC is auto path to your init.lua)
|
||||||
keymap("n", "<leader>se", ":setlocal spell! spelllang=en_us,nl<cr>", opts)
|
-- }}}
|
||||||
keymap("n", "<leader>sd", ":setlocal spell! spelllang=de_at,nl<cr>", opts)
|
|
||||||
|
|
||||||
-- date time stamp
|
-- {{{ Plugins
|
||||||
keymap("n", "<leader>dt", [[i<c-r>=strftime("%d.%m.%Y")<cr><space>]], opts)
|
-- Yazi (keeping this here since it's a simple command keymap)
|
||||||
keymap("n", "<leader>tt", [[i<c-r>=strftime("%H:%M")<cr><space>]], opts)
|
keymap("n", "<leader>y", ":Yazi<cr>", opt) -- open Yazi file manager
|
||||||
|
|
||||||
-- double space over word to find and replace
|
-- mkdx checkbox toggle (disable default space key, use leader+t instead)
|
||||||
keymap("n", "<space><space>", [[:%s/\<<c-r>=expand("<cword>")<cr>\>/]], opt)
|
vim.g["mkdx#settings"] = {
|
||||||
|
checkbox = {
|
||||||
|
toggles = {' ', 'x', '-'},
|
||||||
|
toggle_key = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
keymap("n", "<leader>t", "<Plug>(mkdx-checkbox-next-n)", opt) -- toggle markdown checkbox
|
||||||
|
-- }}}
|
||||||
|
|
||||||
-- write file if you forgot to give it sudo permission
|
-- {{{ Whole Document Select
|
||||||
keymap("c", "w!!", [[w !sudo tee %]], opt)
|
keymap("n", "<leader>a", "ggVG", opt) -- select entire document
|
||||||
|
-- }}}
|
||||||
-- diff since last save
|
|
||||||
keymap("n", "<leader>df", [[:w !diff % -<cr>]], opt)
|
|
||||||
keymap("x", "<leader>df", [[:w !diff % -<cr>]], opt)
|
|
||||||
|
|
||||||
-- Yank to System Clipbpard
|
|
||||||
keymap("x", "Y", '"+y', opt)
|
|
||||||
keymap("n", "<leader>y", ':Yazi<cr>', opt)
|
|
||||||
|
|
||||||
local hop = require('hop')
|
|
||||||
local directions = require('hop.hint').HintDirection
|
|
||||||
vim.keymap.set('', 'f', function()
|
|
||||||
hop.hint_char1({ direction = directions.AFTER_CURSOR, })
|
|
||||||
end, {remap=true})
|
|
||||||
vim.keymap.set('', 'F', function()
|
|
||||||
hop.hint_char1({ direction = directions.BEFORE_CURSOR, })
|
|
||||||
end, {remap=true})
|
|
||||||
vim.keymap.set('', 't', function()
|
|
||||||
hop.hint_char1({ direction = directions.AFTER_CURSOR, hint_offset = -1 })
|
|
||||||
end, {remap=true})
|
|
||||||
vim.keymap.set('', 'T', function()
|
|
||||||
hop.hint_char1({ direction = directions.BEFORE_CURSOR, hint_offset = 1 })
|
|
||||||
end, {remap=true})
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<Left>', '<C-w>h', { noremap = true })
|
|
||||||
vim.keymap.set('n', '<Right>', '<C-w>l', { noremap = true })
|
|
||||||
vim.keymap.set('n', '<Up>', '<C-w>k', { noremap = true })
|
|
||||||
vim.keymap.set('n', '<Down>', '<C-w>j', { noremap = true })
|
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
-- Global settings
|
-- Global settings
|
||||||
vim.opt.tabstop = 4 -- Number of spaces that a <Tab> counts for
|
vim.opt.tabstop = 4 -- Number of spaces that a <Tab> counts for
|
||||||
vim.opt.shiftwidth = 4 -- Number of spaces for indentation
|
vim.opt.shiftwidth = 4 -- Number of spaces for indentation
|
||||||
vim.opt.expandtab = true -- Use spaces instead of tabs
|
vim.opt.expandtab = true -- Use spaces instead of tabs
|
||||||
|
vim.opt.cmdheight = 0 -- Hide command line when not in use
|
||||||
|
|
||||||
vim.cmd [[highlight CursorLine guibg=#3c3836]] -- Darker background for the line
|
vim.cmd([[highlight CursorLine guibg=#3c3836]]) -- Darker background for the line
|
||||||
vim.cmd [[highlight CursorColumn guibg=#504945]] -- Slightly darker for the column
|
vim.cmd([[highlight CursorColumn guibg=#504945]]) -- Slightly darker for the column
|
||||||
|
|
||||||
vim.cmd [[set incsearch ]] -- Enables incremental search
|
vim.cmd([[set incsearch ]]) -- Enables incremental search
|
||||||
vim.cmd [[set hlsearch ]] -- Highlights search results
|
vim.cmd([[set hlsearch ]]) -- Highlights search results
|
||||||
vim.cmd [[set ignorecase]] -- Case insensitive search
|
vim.cmd([[set ignorecase]]) -- Case insensitive search
|
||||||
vim.cmd [[set smartcase ]] -- Case sensitive if uppercase letters are used
|
vim.cmd([[set smartcase ]]) -- Case sensitive if uppercase letters are used
|
||||||
|
|
||||||
-- Coloscheme
|
-- Coloscheme
|
||||||
vim.cmd [[colorscheme gruvbox]]
|
vim.cmd([[colorscheme gruvbox]])
|
||||||
|
|
||||||
vim.cmd [[set spelllang=en]]
|
|
||||||
|
|
||||||
|
vim.cmd([[set spelllang=en]])
|
||||||
|
|
||||||
vim.cmd([[
|
vim.cmd([[
|
||||||
highlight Normal ctermbg=none guibg=none
|
highlight Normal ctermbg=none guibg=none
|
||||||
@@ -24,3 +24,12 @@ vim.cmd([[
|
|||||||
|
|
||||||
vim.o.title = true
|
vim.o.title = true
|
||||||
vim.o.titlestring = "nvim: %f"
|
vim.o.titlestring = "nvim: %f"
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "lua",
|
||||||
|
callback = function()
|
||||||
|
vim.opt_local.foldmethod = "marker"
|
||||||
|
vim.opt_local.foldlevel = 99 -- so folds are open by default
|
||||||
|
vim.opt_local.fileencoding = "utf-8"
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user