-- Plugins local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_stat(lazypath) then vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath, }) end vim.opt.rtp:prepend(lazypath) require("lazy").setup({ { 'nvim-telescope/telescope.nvim', dependencies = { 'nvim-lua/plenary.nvim', { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make' }, { 'nvim-telescope/telescope-file-browser.nvim' }, }, keys = { { 'ff', 'Telescope find_files' }, { 'fg', 'Telescope live_grep' }, { 'fb', 'Telescope buffers' }, { 'e', 'Telescope file_browser' }, }, }, { "rcarriga/nvim-dap-ui", dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" }, }, { 'lewis6991/gitsigns.nvim', event = { 'BufReadPre', 'BufNewFile' }, opts = { signs = { add = { text = '+' }, change = { text = '~' }, delete = { text = '_' }, topdelete = { text = '-' }, changedelete = { text = '~' }, }, }, }, { "iamcco/markdown-preview.nvim", cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, build = "cd app && npm install", init = function() vim.g.mkdp_filetypes = { "markdown" } end, ft = { "markdown" }, }, }) -- theme vim.cmd.colorscheme("unokai") vim.api.nvim_set_hl(0, "Normal", { bg = "none" }) vim.api.nvim_set_hl(0, "NormalNC", { bg = "none" }) vim.api.nvim_set_hl(0, "EndOfBuffer", { bg = "none" }) -- basic settings vim.opt.number = true vim.opt.relativenumber = true vim.opt.cursorline = true vim.opt.wrap = false vim.opt.scrolloff = 10 vim.opt.list = true vim.opt.listchars = { extends = '…', precedes = '…', tab = ' ' } vim.opt.sidescrolloff = 1 vim.opt.tabstop = 2 vim.opt.shiftwidth = 2 vim.opt.softtabstop = 2 vim.opt.expandtab = true vim.opt.smartindent = true -- search vim.opt.ignorecase = true vim.opt.smartcase = true vim.opt.hlsearch = true vim.opt.incsearch = true -- visuals vim.opt.termguicolors = true vim.opt.signcolumn = "yes" vim.opt.colorcolumn = "100" vim.opt.showmatch = true vim.opt.matchtime = 2 vim.opt.cmdheight = 1 vim.opt.completeopt = "menuone,noinsert,noselect" vim.opt.showmode = false vim.opt.pumheight = 10 vim.opt.pumblend = 10 vim.opt.winblend = 0 vim.opt.conceallevel = 0 vim.opt.lazyredraw = true -- files vim.opt.swapfile = false vim.opt.undofile = true vim.opt.undodir = vim.fn.expand("~/.vim/undodir") vim.opt.updatetime = 300 vim.opt.timeoutlen = 500 vim.opt.autoread = true -- behavior vim.opt.hidden = true vim.opt.backspace = "indent,eol,start" vim.opt.iskeyword:append("-") vim.opt.path:append("**") vim.opt.clipboard:append("unnamedplus") vim.opt.encoding = "UTF-8" -- keymaps vim.keymap.set({ "n", "v" }, "d", '"_d', { desc = "Delete without yanking" }) vim.keymap.set("n", "w", ":w", { desc = "Save file" }) vim.keymap.set("n", "h", ":nohlsearch", { desc = "Clear search highlight" }) vim.keymap.set("n", "J", "mzJ`z") -- move lines (visual only) vim.keymap.set("v", "J", ":m '>+1gv=gv") vim.keymap.set("v", "K", ":m '<-2gv=gv") -- indent keep selection vim.keymap.set("v", "<", "", ">gv") -- copy full path vim.keymap.set("n", "pp", function() local path = vim.fn.expand("%:p") vim.fn.setreg("+", path) print("file:", path) end) -- autocommands local augroup = vim.api.nvim_create_augroup("UserConfig", {}) vim.api.nvim_create_autocmd("TextYankPost", { group = augroup, callback = function() vim.highlight.on_yank() end, }) -- LSP vim.api.nvim_create_autocmd('LspAttach', { callback = function(event) local opts = { buffer = event.buf } -- navigation (fixed) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) -- info vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) -- actions vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, opts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) -- diagnostics vim.keymap.set('n', 'nd', vim.diagnostic.goto_next, opts) vim.keymap.set('n', 'pd', vim.diagnostic.goto_prev, opts) vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) end, }) vim.diagnostic.config({ virtual_text = { prefix = '●' }, signs = true, underline = true, })