From cfdb14cf768f2971f6efe2e333c620571f30fad1 Mon Sep 17 00:00:00 2001 From: Minijackson Date: Wed, 18 Jan 2023 13:39:42 +0100 Subject: vim: refactor, allowing different files like ftplugin --- dotfiles/vim.lua | 494 ------------------------------------------------------- 1 file changed, 494 deletions(-) delete mode 100644 dotfiles/vim.lua (limited to 'dotfiles/vim.lua') diff --git a/dotfiles/vim.lua b/dotfiles/vim.lua deleted file mode 100644 index defee0c..0000000 --- a/dotfiles/vim.lua +++ /dev/null @@ -1,494 +0,0 @@ --- Options ----------- - -vim.o.undofile = true -vim.o.backup = true -vim.opt.backupdir:remove "." - -vim.opt.shortmess:append "c" - -vim.o.mouse = "a" - -vim.o.ignorecase = true -vim.o.smartcase = true - -vim.o.smartindent = true - --- tabstop and shiftwidth are also set locally by individual filetypes - -vim.o.tabstop = 4 -vim.o.shiftwidth = 4 - -vim.opt.shortmess:append "A" - -vim.o.inccommand = "split" - -vim.o.scrolloff = 1 -vim.o.sidescrolloff = 5 - -vim.o.colorcolumn = "80" -vim.o.cursorline = true - -vim.o.title = true - -vim.opt.wildmode = { "longest:full", "full" } -vim.opt.completeopt = { "menu", "menuone", "preview", "noinsert", "noselect" } - --- Use ripgrep -vim.o.grepprg = vim.g.ripgrep_path .. " --vimgrep --smart-case" -vim.o.grepformat = "%f:%l:%c:%m," .. vim.o.grepformat - -vim.o.termguicolors = true -vim.o.background = "dark" - -vim.o.updatetime = 1000 - --- Mode already shown by the status line -vim.o.showmode = false - -vim.opt.listchars = { - extends = ">", - nbsp = "+", - precedes = "<", - tab = " ", - trail = "-", -} -vim.wo.list = true - --- Leaders ----------- - -vim.g.maplocalleader = "," -vim.g.mapleader = ";" - --- Misc -------- - --- From neovim#14420 --- Restores the position of previously opened files - --- Inspired by: https://github.com/ethanholz/nvim-lastplace - -local last_cursor_pos_augroup = vim.api.nvim_create_augroup("LastCursorPos", {}) -vim.api.nvim_create_autocmd("BufReadPost", { - group = last_cursor_pos_augroup, - desc = "Restore the position of previously opened files", - callback = function(opts) - if vim.tbl_contains({ "quickfix", "nofile", "help" }, vim.bo.buftype) then - return - end - - if vim.tbl_contains({ "gitcommit", "gitrebase", "svn", "hgcommit" }, vim.bo.filetype) then - return - end - - -- If a line has already been specified on the command line, we are done - -- nvim file +num - if vim.fn.line "." > 1 then - return - end - - -- If the last line is set and the less than the last line in the buffer - if vim.fn.line [['"]] > 0 and vim.fn.line [['"]] <= vim.fn.line "$" then - if vim.fn.line "w$" == vim.fn.line "$" then - -- if the last line in the current buffer is also the last line visible - -- in this window - vim.cmd [[normal! g`"]] - elseif vim.fn.line "$" - vim.fn.line [['"]] > ((vim.fn.line "w$" - vim.fn.line "w0") / 2) - 1 then - -- if we're not at the bottom of the file, center the cursor on the - -- screen after we make the jump - vim.cmd [[normal! g`"zz]] - else - -- otherwise, show as much context as we can by jumping to the end of - -- the file and then to the mark. If we pressed zz here, there would be - -- blank lines at the bottom of the screen. We intentionally leave the - -- last line blank by pressing so the user has a clue that they - -- are near the end of the file. - vim.cmd [[normal! G'"]] - end - end - end, -}) - -vim.api.nvim_create_autocmd("TextYankPost", { - desc = "Highlight yanked text", - callback = function(opts) - vim.highlight.on_yank() - end, -}) - -vim.g.tex_flavor = "latex" - -vim.g.gruvbox_italic = 1 -vim.cmd "colorscheme gruvbox" - --- Mappings ------------ - -local mapopts = { noremap = true, silent = true } - -vim.fn["camelcasemotion#CreateMotionMappings"] "" - -vim.keymap.set("n", "yof", function() - if vim.opt_local.formatoptions:get().a then - vim.opt_local.formatoptions:remove "a" - print ":setlocal formatoptions-=a" - else - vim.opt_local.formatoptions:append "a" - print ":setlocal formatoptions+=a" - end -end, mapopts) - --- Plugins ----------- - --- Impatient - -require("impatient") - --- Gitsigns - -require("gitsigns").setup { - keymaps = { - noremap = true, - buffer = true, - silent = true, - - ["n ]c"] = { expr = true, "&diff ? ']c' : 'lua require\"gitsigns\".next_hunk()'" }, - ["n [c"] = { expr = true, "&diff ? '[c' : 'lua require\"gitsigns\".prev_hunk()'" }, - - ["n hs"] = 'lua require"gitsigns".stage_hunk()', - ["n hu"] = 'lua require"gitsigns".undo_stage_hunk()', - ["n hr"] = 'lua require"gitsigns".reset_hunk()', - ["n hR"] = 'lua require"gitsigns".reset_buffer()', - ["n hp"] = 'lua require"gitsigns".preview_hunk()', - ["n hb"] = 'lua require"gitsigns".blame_line()', - - -- Text objects - ["o ih"] = ':lua require"gitsigns".select_hunk()', - ["x ih"] = ':lua require"gitsigns".select_hunk()', - }, -} - --- Treesitter - -require("nvim-treesitter.configs").setup { - parser_install_dir = vim.fn.stdpath("data") .. "/site", - highlight = { - enable = true, - }, - incremental_selection = { - enable = true, - keymaps = { - init_selection = "gnn", - node_incremental = "grn", - scope_incremental = "grc", - node_decremental = "grm", - }, - }, - indent = { - enable = true, - disable = { "rust" }, - }, - matchup = { - enable = true, - }, - refactor = { - highlight_definitions = { enable = true }, - navigation = { enable = true }, - }, - textobjects = { - lsp_interop = { - enable = true, - border = "none", - peek_definition_code = { - ["df"] = "@function.outer", - ["dF"] = "@class.outer", - }, - }, - - move = { - enable = true, - goto_next_start = { - ["]m"] = "@function.outer", - ["]]"] = "@class.outer", - }, - goto_next_end = { - ["]M"] = "@function.outer", - ["]["] = "@class.outer", - }, - goto_previous_start = { - ["[m"] = "@function.outer", - ["[["] = "@class.outer", - }, - goto_previous_end = { - ["[M"] = "@function.outer", - ["[]"] = "@class.outer", - }, - }, - - select = { - enable = true, - keymaps = { - -- You can use the capture groups defined in textobjects.scm - ["af"] = "@function.outer", - ["if"] = "@function.inner", - - ["aF"] = "@call.outer", - ["iF"] = "@call.inner", - - ["ac"] = "@class.outer", - ["ic"] = "@class.inner", - - ["aC"] = "@comment.outer", - ["iC"] = "@comment.inner", - - ["ab"] = "@block.outer", - ["ib"] = "@block.inner", - - ["aa"] = "@parameter.outer", - ["ia"] = "@parameter.inner", - }, - }, - - swap = { - enable = true, - swap_next = { - ["a"] = "@parameter.inner", - }, - swap_previous = { - ["A"] = "@parameter.inner", - }, - }, - }, -} - -vim.o.foldmethod = "expr" -vim.o.foldexpr = "nvim_treesitter#foldexpr()" -vim.o.foldlevel = 99 - -vim.api.nvim_set_hl(0, "TSCurrentScope", { - bg = vim.g.current_gruvbox_colors.dark0_soft[1], -}) - -vim.api.nvim_set_hl(0, "TSDefinition", { - bg = vim.g.current_gruvbox_colors.faded_blue[1], -}) - -vim.api.nvim_set_hl(0, "TSDefinitionUsage", { - bg = vim.g.current_gruvbox_colors.faded_aqua[1], -}) - --- Treesitter highlight groups - -vim.api.nvim_set_hl(0, "@attribute", { link = "Macro" }) -vim.api.nvim_set_hl(0, "@error", { link = "ErrorMsg" }) - -vim.api.nvim_set_hl(0, "@text.diff.add", { link = "diffAdded" }) -vim.api.nvim_set_hl(0, "@text.diff.delete", { link = "diffRemoved" }) - -vim.api.nvim_set_hl(0, "@text.strong", { bold = true }) -vim.api.nvim_set_hl(0, "@text.emphasis", { italic = true }) -vim.api.nvim_set_hl(0, "@text.underline", { underline = true }) -vim.api.nvim_set_hl(0, "@text.strike", { strikethrough = true }) -vim.api.nvim_set_hl(0, "@text.environment", { link = "Macro" }) - -vim.api.nvim_set_hl(0, "@text.note", { link = "ModeMsg" }) -vim.api.nvim_set_hl(0, "@text.warning", { link = "WarningMsg" }) -vim.api.nvim_set_hl(0, "@text.warning", { link = "ErrorMsg" }) - -vim.api.nvim_set_hl(0, "@tag.attribute", { link = "@attribute" }) -vim.api.nvim_set_hl(0, "@tag.delimiter", { link = "@punctuation.delimiter" }) - --- nvim-cmp - -local cmp = require "cmp" - -cmp.setup { - snippet = { - expand = function(args) - vim.fn["vsnip#anonymous"](args.body) - end, - }, - mapping = cmp.mapping.preset.insert { - [""] = cmp.mapping.confirm { select = false }, - }, - sources = cmp.config.sources({ - { name = "nvim_lsp" }, - { name = "vsnip" }, - { name = "latex_symbols" }, - { name = "calc" }, - }, { - { name = "path" }, - { name = "treesitter" }, - }, { - { name = "tmux" }, - { name = "spell" }, - -- Use \k for iskeyword because of UTF-8 - { name = "buffer", option = { keyword_pattern = [[\k\+]] } }, - }), -} - --- cmp.setup.cmdline("/", { --- sources = { --- { name = "buffer", option = { keyword_pattern = [[\k\+]] } }, --- }, --- mapping = cmp.mapping.preset.cmdline {}, --- }) - --- cmp.setup.cmdline(":", { --- sources = cmp.config.sources { --- { name = "cmdline" }, --- }, --- mapping = cmp.mapping.preset.cmdline {}, --- }) - --- Telescope - -require("telescope").setup { - extensions = { - file_browser = { - path = "%:p:h", - dir_icon = "D", - }, - ["ui-select"] = { - require("telescope.themes").get_dropdown(), - }, - }, -} - -require("telescope").load_extension "file_browser" -require("telescope").load_extension "ui-select" - -local telescope_builtin = require "telescope.builtin" -local telescope_extensions = require("telescope").extensions - -vim.keymap.set("n", "fb", telescope_builtin.buffers, mapopts) -vim.keymap.set("n", "ff", telescope_builtin.find_files, mapopts) -vim.keymap.set("n", "fg", telescope_builtin.live_grep, mapopts) -vim.keymap.set("n", "fh", telescope_builtin.help_tags, mapopts) -vim.keymap.set("n", "fo", telescope_builtin.oldfiles, mapopts) -vim.keymap.set("n", "fs", telescope_builtin.spell_suggest, mapopts) -vim.keymap.set("n", "ft", telescope_builtin.treesitter, mapopts) -vim.keymap.set("n", "-", telescope_extensions.file_browser.file_browser, mapopts) - --- Lualine - -require("lualine").setup { - options = { - component_separators = "", - icons_enabled = false, - section_separators = "", - }, - sections = { - lualine_c = { - "filename", - { - "lsp_progress", - display_components = { "lsp_client_name", { "title", "percentage", "message" } }, - }, - }, - }, -} - --- VSnip - -vim.keymap.set("i", "", "vsnip#jumpable(1) ? '(vsnip-jump-next)' : ''", { silent = true, expr = true }) -vim.keymap.set("s", "", "vsnip#jumpable(1) ? '(vsnip-jump-next)' : ''", { silent = true, expr = true }) - -vim.keymap.set( - "i", - "", - "vsnip#jumpable(-1) ? '(vsnip-jump-prev)' : ''", - { silent = true, expr = true } -) -vim.keymap.set( - "s", - "", - "vsnip#jumpable(-1) ? '(vsnip-jump-prev)' : ''", - { silent = true, expr = true } -) - --- OSCyank - --- Text yanked into the "t register gets copied using OSC52 escape sequences --- (e.g. goes through SSH) -vim.api.nvim_create_autocmd("TextYankPost", { - desc = "Setup for OSCYank", - callback = function(opts) - if vim.v.event.regname == "t" then - vim.cmd [[OSCYankReg t]] - end - end, -}) - --- Diffview - -require("diffview").setup { - use_icons = false, - enhanced_diff_hl = true, -} - --- Notify - -vim.cmd [[highlight link NotifyERRORBorder DiagnosticError]] -vim.cmd [[highlight link NotifyERRORIcon DiagnosticError]] -vim.cmd [[highlight link NotifyERRORTitle DiagnosticError]] - -vim.cmd [[highlight link NotifyWARNBorder DiagnosticWarn]] -vim.cmd [[highlight link NotifyWARNIcon DiagnosticWarn]] -vim.cmd [[highlight link NotifyWARNTitle DiagnosticWarn]] - -vim.cmd [[highlight link NotifyINFOBorder DiagnosticInfo]] -vim.cmd [[highlight link NotifyINFOIcon DiagnosticInfo]] -vim.cmd [[highlight link NotifyINFOTitle DiagnosticInfo]] - -vim.cmd [[highlight link NotifyDEBUGBorder DiagnosticHint]] -vim.cmd [[highlight link NotifyDEBUGIcon DiagnosticHint]] -vim.cmd [[highlight link NotifyDEBUGTitle DiagnosticHint]] - -vim.cmd [[highlight link NotifyDEBUGBorder GruvboxPurple]] -vim.cmd [[highlight link NotifyDEBUGIcon GruvboxPurple]] -vim.cmd [[highlight link NotifyDEBUGTitle GruvboxPurple]] - -require("notify").setup { stages = "static" } - -vim.notify = require("notify") - --- Comment - -require("Comment").setup {} - --- Indent Blankline - -vim.api.nvim_set_hl(0, "IndentBlanklineContextChar", { - fg = vim.g.current_gruvbox_colors.aqua[1], -}) - -require("indent_blankline").setup { - show_current_context = true, - show_current_context_start = true, -} - --- Local config - -function isModuleAvailable(name) - if package.loaded[name] then - return true - else - for _, searcher in ipairs(package.searchers or package.loaders) do - local loader = searcher(name) - if type(loader) == "function" then - package.preload[name] = loader - return true - end - end - return false - end -end - -vim.opt.runtimepath:append "~/.config/nvim" - -if isModuleAvailable "local_config" then - require "local_config" -end -- cgit v1.2.3