mirror of
https://github.com/hazemKrimi/config-minimal.nvim.git
synced 2026-05-01 18:20:27 +00:00
feat: config without plugins
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
local augroup = vim.api.nvim_create_augroup("UserConfig", {})
|
||||
|
||||
-- Highlight yanked text
|
||||
|
||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end,
|
||||
})
|
||||
|
||||
-- Return to last edit position when opening files
|
||||
|
||||
vim.api.nvim_create_autocmd("BufReadPost", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
local mark = vim.api.nvim_buf_get_mark(0, '"')
|
||||
local lcount = vim.api.nvim_buf_line_count(0)
|
||||
local line = mark[1]
|
||||
local ft = vim.bo.filetype
|
||||
if line > 0 and line <= lcount
|
||||
and vim.fn.index({ "commit", "gitrebase", "xxd" }, ft) == -1
|
||||
and not vim.o.diff then
|
||||
pcall(vim.api.nvim_win_set_cursor, 0, mark)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Auto-close terminal when process exits
|
||||
|
||||
vim.api.nvim_create_autocmd("TermClose", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
if vim.v.event.status == 0 then
|
||||
vim.api.nvim_buf_delete(0, {})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Auto-resize splits when window is resized
|
||||
|
||||
vim.api.nvim_create_autocmd("VimResized", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
vim.cmd("tabdo wincmd =")
|
||||
end,
|
||||
})
|
||||
|
||||
-- Create directories when saving files
|
||||
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
local dir = vim.fn.expand('<afile>:p:h')
|
||||
if vim.fn.isdirectory(dir) == 0 then
|
||||
vim.fn.mkdir(dir, 'p')
|
||||
end
|
||||
end,
|
||||
})
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
-- Leader Map
|
||||
|
||||
vim.g.mapleader = ' '
|
||||
vim.g.maplocalleader = ' '
|
||||
vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true })
|
||||
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
-- Movement
|
||||
|
||||
vim.keymap.set("n", "n", "nzzzv", { desc = "Next search result (centered)" })
|
||||
vim.keymap.set("n", "N", "Nzzzv", { desc = "Previous search result (centered)" })
|
||||
vim.keymap.set("n", "<C-d>", "<C-d>zz", { desc = "Half page down (centered)" })
|
||||
vim.keymap.set("n", "<C-u>", "<C-u>zz", { desc = "Half page up (centered)" })
|
||||
vim.keymap.set("n", "<A-j>", ":m .+1<CR>==", { desc = "Move line down" })
|
||||
vim.keymap.set("n", "<A-k>", ":m .-2<CR>==", { desc = "Move line up" })
|
||||
vim.keymap.set("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
|
||||
vim.keymap.set("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
|
||||
|
||||
-- Split Navigation
|
||||
|
||||
vim.keymap.set('n', '<leader>vs', '<C-w>v', { desc = 'Split window vertically' })
|
||||
vim.keymap.set('n', '<leader>hs', '<C-w>s', { desc = 'Split window horizontally' })
|
||||
vim.keymap.set('n', '<leader>es', '<C-w>=', { desc = 'Equalize splits' })
|
||||
vim.keymap.set('n', '<leader>xs', ':close<CR>', { desc = 'Close split' })
|
||||
vim.keymap.set('n', '<C-k>', ':wincmd k<CR>', opts)
|
||||
vim.keymap.set('n', '<C-j>', ':wincmd j<CR>', opts)
|
||||
vim.keymap.set('n', '<C-h>', ':wincmd h<CR>', opts)
|
||||
vim.keymap.set('n', '<C-l>', ':wincmd l<CR>', opts)
|
||||
vim.keymap.set('n', '<Up>', ':resize -2<CR>', opts)
|
||||
vim.keymap.set('n', '<Down>', ':resize +2<CR>', opts)
|
||||
vim.keymap.set('n', '<Left>', ':vertical resize -2<CR>', opts)
|
||||
vim.keymap.set('n', '<Right>', ':vertical resize +2<CR>', opts)
|
||||
|
||||
-- Buffer Navigation
|
||||
|
||||
vim.keymap.set("n", "<leader>bn", ":bnext<CR>", { desc = "Next buffer" })
|
||||
vim.keymap.set("n", "<leader>bp", ":bprevious<CR>", { desc = "Previous buffer" })
|
||||
|
||||
-- File Navigation
|
||||
|
||||
vim.keymap.set("n", "<leader>e", ":Explore<CR>", { desc = "Open file explorer" })
|
||||
vim.keymap.set("n", "<leader>ff", ":find ", { desc = "Find file" })
|
||||
|
||||
-- Tab Navigation
|
||||
|
||||
vim.keymap.set('n', '<leader>tn', ':tabnew<CR>', { desc = 'New tab' })
|
||||
vim.keymap.set('n', '<leader>tx', ':tabclose<CR>', { desc = 'Close tab' })
|
||||
vim.keymap.set('n', '<leader>tm', ':tabmove<CR>', { desc = 'Move tab' })
|
||||
vim.keymap.set('n', '<leader>t>', ':tabmove +1<CR>', { desc = 'Move tab right' })
|
||||
vim.keymap.set('n', '<leader>t<', ':tabmove -1<CR>', { desc = 'Move tab left' })
|
||||
|
||||
-- Function to open file in new tab
|
||||
|
||||
local function open_file_in_tab()
|
||||
vim.ui.input({ prompt = 'File to open in new tab: ', completion = 'file' }, function(input)
|
||||
if input and input ~= '' then
|
||||
vim.cmd('tabnew ' .. input)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Function to duplicate current tab
|
||||
|
||||
local function duplicate_tab()
|
||||
local current_file = vim.fn.expand('%:p')
|
||||
if current_file ~= '' then
|
||||
vim.cmd('tabnew ' .. current_file)
|
||||
else
|
||||
vim.cmd('tabnew')
|
||||
end
|
||||
end
|
||||
|
||||
-- Function to close tabs to the right
|
||||
|
||||
local function close_tabs_right()
|
||||
local current_tab = vim.fn.tabpagenr()
|
||||
local last_tab = vim.fn.tabpagenr('$')
|
||||
|
||||
for i = last_tab, current_tab + 1, -1 do
|
||||
vim.cmd(i .. 'tabclose')
|
||||
end
|
||||
end
|
||||
|
||||
-- Function to close tabs to the left
|
||||
|
||||
local function close_tabs_left()
|
||||
local current_tab = vim.fn.tabpagenr()
|
||||
|
||||
for i = current_tab - 1, 1, -1 do
|
||||
vim.cmd('1tabclose')
|
||||
end
|
||||
end
|
||||
|
||||
vim.keymap.set('n', '<leader>tO', open_file_in_tab, { desc = 'Open file in new tab' })
|
||||
vim.keymap.set('n', '<leader>td', duplicate_tab, { desc = 'Duplicate current tab' })
|
||||
vim.keymap.set('n', '<leader>tr', close_tabs_right, { desc = 'Close tabs to the right' })
|
||||
vim.keymap.set('n', '<leader>tL', close_tabs_left, { desc = 'Close tabs to the left' })
|
||||
|
||||
-- Function to close buffer but keep tab if it's the only buffer in tab
|
||||
|
||||
local function smart_close_buffer()
|
||||
local buffers_in_tab = #vim.fn.tabpagebuflist()
|
||||
if buffers_in_tab > 1 then
|
||||
vim.cmd('bdelete')
|
||||
else
|
||||
-- If it's the only buffer in tab, close the tab
|
||||
vim.cmd('tabclose')
|
||||
end
|
||||
end
|
||||
vim.keymap.set('n', '<leader>bd', smart_close_buffer, { desc = 'Smart close buffer/tab' })
|
||||
|
||||
-- Diagnostic keymaps
|
||||
|
||||
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' })
|
||||
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' })
|
||||
vim.keymap.set('n', '<leader>d', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' })
|
||||
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' })
|
||||
|
||||
-- Convenience
|
||||
|
||||
vim.keymap.set({ "n", "v" }, "<leader>d", '"_d', { desc = "Delete without yanking" })
|
||||
vim.keymap.set("x", "<leader>p", [["_dP]], { desc = 'Paste previously yanked' })
|
||||
vim.keymap.set('n', '<leader>lw', '<cmd>set wrap!<CR>', opts)
|
||||
vim.keymap.set('v', '<', '<gv', opts)
|
||||
vim.keymap.set('v', '>', '>gv', opts)
|
||||
vim.keymap.set("n", "<leader>c", ":nohlsearch<CR>", { desc = "Clear search highlights" })
|
||||
vim.keymap.set("n", "J", "mzJ`z", { desc = "Join lines and keep cursor position" })
|
||||
vim.keymap.set("n", "<leader>rc", ":e $MYVIMRC<CR>", { desc = "Edit config" })
|
||||
vim.keymap.set("n", "<leader>rl", ":so $MYVIMRC<CR>", { desc = "Reload config" })
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
-- Theme
|
||||
|
||||
vim.cmd.colorscheme("lunaperche")
|
||||
|
||||
-- Basic
|
||||
|
||||
vim.wo.number = true
|
||||
vim.o.relativenumber = true
|
||||
vim.o.cursorline = true
|
||||
vim.o.wrap = false
|
||||
vim.o.scrolloff = 10
|
||||
vim.o.sidescrolloff = 8
|
||||
|
||||
-- Indentation
|
||||
|
||||
vim.o.tabstop = 2
|
||||
vim.o.softtabstop = 2
|
||||
vim.o.shiftwidth = 2
|
||||
vim.o.expandtab = true
|
||||
vim.o.smartindent = true
|
||||
vim.o.autoindent = true
|
||||
|
||||
-- Search
|
||||
|
||||
vim.o.ignorecase = true
|
||||
vim.o.smartcase = true
|
||||
vim.o.autoindent = true
|
||||
|
||||
-- Visual
|
||||
|
||||
vim.o.winborder = "single"
|
||||
vim.o.termguicolors = true
|
||||
vim.o.signcolumn = "yes"
|
||||
vim.o.showmatch = true
|
||||
vim.o.matchtime = 2
|
||||
vim.o.cmdheight = 1
|
||||
vim.o.completeopt = "menuone,noinsert,noselect"
|
||||
vim.o.pumheight = 10
|
||||
vim.o.lazyredraw = true
|
||||
vim.o.synmaxcol = 300
|
||||
|
||||
-- File
|
||||
|
||||
vim.o.backup = false
|
||||
vim.o.writebackup = false
|
||||
vim.o.swapfile = false
|
||||
vim.o.undofile = true
|
||||
vim.o.undodir = vim.fn.expand("~/.vim/undofir")
|
||||
vim.o.updatetime = 300
|
||||
vim.o.timeoutlen = 500
|
||||
vim.o.ttimeoutlen = 0
|
||||
vim.o.autoread = true
|
||||
vim.o.autowrite = false
|
||||
|
||||
-- Behavior
|
||||
|
||||
vim.o.hidden = true
|
||||
vim.o.errorbells = true
|
||||
vim.o.backspace = "indent,eol,start"
|
||||
vim.o.autochdir = false
|
||||
vim.o.selection = "exclusive"
|
||||
vim.o.mouse = "a"
|
||||
vim.o.modifiable = true
|
||||
vim.o.encoding = "UTF-8"
|
||||
vim.opt.clipboard:append 'unnamedplus'
|
||||
vim.opt.iskeyword:append '-'
|
||||
vim.opt.path:append '**'
|
||||
|
||||
-- Folding
|
||||
|
||||
vim.o.foldmethod = "expr"
|
||||
vim.o.foldexpr = "nvim_treesitter#foldexpr()"
|
||||
vim.o.foldlevel = 99
|
||||
|
||||
-- Split Behavior
|
||||
|
||||
vim.o.splitbelow = true
|
||||
vim.o.splitright = true
|
||||
|
||||
-- Command Line Completion
|
||||
|
||||
vim.o.wildmenu = true
|
||||
vim.o.wildmode = "longest:full,full"
|
||||
|
||||
-- Performance
|
||||
|
||||
vim.o.redrawtime = 10000
|
||||
vim.o.maxmempattern = 20000
|
||||
|
||||
-- Undo Directory
|
||||
|
||||
local undodir = vim.fn.expand("~/.vim/undodir")
|
||||
if vim.fn.isdirectory(undodir) == 0 then
|
||||
vim.fn.mkdir(undodir, "p")
|
||||
end
|
||||
|
||||
-- Tabs
|
||||
|
||||
vim.o.showtabline = 1
|
||||
vim.o.tabline = ''
|
||||
Reference in New Issue
Block a user