set nocompatible filetype off call plug#begin('$HOME/.config/nvim/bundle') Plug 'tpope/vim-sensible' " Gruvbox colors " Plug 'ellisonleao/gruvbox.nvim' Plug '~/Projects/libs/gruvbox.nvim' " Plug 'terryma/vim-multiple-cursors' Plug 'mg979/vim-visual-multi' " Plug 'Lokaltog/vim-easymotion' Plug 'ggandor/leap.nvim' Plug 'simrat39/rust-tools.nvim' " Plug 'vim-ruby/vim-ruby' Plug 'tpope/vim-rails' Plug 'tpope/vim-rake' Plug 'tpope/vim-bundler' Plug 'tpope/vim-markdown' Plug 'ledger/vim-ledger' Plug 'slim-template/vim-slim' Plug 'fatih/vim-go' Plug 'Glench/Vim-Jinja2-Syntax' Plug 'HerringtonDarkholme/yats.vim' Plug 'm-pilia/vim-ccls' Plug 'm-pilia/vim-yggdrasil' Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " Fish shell Plug 'dag/vim-fish' " Zig Plug 'ziglang/zig.vim' " Elixir Plug 'elixir-editors/vim-elixir' Plug 'mhinz/vim-mix-format' " Plug 'tomtom/tcomment_vim' Plug '~/Projects/libs/tcomment_vim' Plug 'majutsushi/tagbar', { 'on': 'TagbarToggle' } Plug 'milkypostman/vim-togglelist' " l and q " Snippets Plug 'L3MON4D3/LuaSnip' " Appearance Plug 'itchyny/lightline.vim' Plug 'bsedin/lightline-lsp' Plug 'editorconfig/editorconfig-vim' Plug 'tpope/vim-surround' Plug 'tpope/vim-unimpaired' Plug 'tpope/vim-endwise' Plug 'tpope/vim-rsi' Plug 'tpope/vim-abolish' Plug 'tpope/vim-eunuch' Plug 'tpope/vim-rhubarb' " Plug 'rstacruz/vim-closer' # bugged Plug 'godlygeek/tabular' " LSP Plug 'neovim/nvim-lspconfig' Plug 'tamago324/nlsp-settings.nvim' Plug 'williamboman/nvim-lsp-installer' Plug 'hrsh7th/cmp-nvim-lsp' Plug 'folke/lsp-colors.nvim' " Plug 'jose-elias-alvarez/null-ls.nvim' Plug 'hrsh7th/cmp-buffer' " Plug 'hrsh7th/cmp-path' Plug 'hrsh7th/cmp-cmdline' Plug 'hrsh7th/nvim-cmp' " For luasnip users. Plug 'saadparwaiz1/cmp_luasnip' " Plug 'tpope/vim-dispatch' " Plug 'airblade/vim-gitgutter' Plug 'lewis6991/gitsigns.nvim' Plug 'tpope/vim-fugitive' Plug 'kassio/neoterm' Plug 'vim-test/vim-test' " Plug 'nvim-neotest/neotest' " Plug 'olimorris/neotest-rspec' Plug 'yssl/QFEnter' " Tasks " Plug 'blindFS/vim-taskwarrior' Plug 'powerman/vim-plugin-AnsiEsc' " Plug 'vimwiki/vimwiki' " Plug 'tbabej/taskwiki' Plug 'McAuleyPenney/tidy.nvim' " Remove whitespaces Plug 'Chiel92/vim-autoformat' Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' " Plug 'junegunn/fzf.vim' Plug 'MunifTanjim/nui.nvim' Plug 'nvim-neo-tree/neo-tree.nvim' call plug#end() " Colorscheme let $NVIM_TUI_ENABLE_TRUE_COLOR=1 set t_Co=256 set termguicolors " Gruvbox colors " autocmd vimenter * ++nested colorscheme mygruvbox " let g:gruvbox_contrast_dark='medium' " let g:gruvbox_contrast_light='medium' colorscheme gruvbox " let neovim guess " set background=dark " silent! map :set background=dark " silent! map :set background=light " Required for operations modifying multiple buffers like rename. set hidden " autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete autocmd FileType ledger setlocal sw=4 ts=4 sts=4 autocmd FileType rust setlocal sw=4 ts=4 sts=4 au BufNewFile,BufRead *.es6 :setlocal filetype=javascript " For conceal markers. if has('conceal') set conceallevel=0 concealcursor=niv endif " Enable snipMate compatibility feature. let g:neosnippet#enable_snipmate_compatibility = 1 " " Tell Neosnippet about the other snippets let g:neosnippet#snippets_directory='$HOME/.config/nvim/bundle/vim-snippets/snippets' lua << EOF vim.cmd [[ highlight Normal guibg=none highlight NonText guibg=none highlight Normal ctermbg=none highlight NonText ctermbg=none ]] require('gitsigns').setup() -- tree-sitter require'nvim-treesitter.configs'.setup { -- A list of parser names, or "all" -- ensure_installed = { "all" }, -- Install parsers synchronously (only applied to `ensure_installed`) sync_install = false, -- List of parsers to ignore installing (for "all") -- ignore_install = { "javascript" }, highlight = { -- `false` will disable the whole extension enable = true, -- NOTE: these are the names of the parsers and not the filetype. (for example if you want to -- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is -- the name of the parser) -- list of language that will be disabled -- disable = { "c", "rust" }, -- Setting this to true will run `:h syntax` and tree-sitter at the same time. -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). -- Using this option may slow down your editor, and you may see some duplicate highlights. -- Instead of true it can also be a list of languages additional_vim_regex_highlighting = false, }, } -- telescope require('telescope').setup{ -- defaults = { -- layout_config = { -- vertical = { width = 0.9 } -- } -- }, defaults = { preview = { treesitter = false, }, }, pickers = { find_files = { theme = "ivy", }, live_grep = { theme = "ivy", } }, } -- nvim-lspconfig local nvim_lsp = require('lspconfig') local nlspsettings = require("nlspsettings") nlspsettings.setup({ config_home = vim.fn.stdpath('config') .. '/nlsp-settings', local_settings_dir = ".nlsp-settings", local_settings_root_markers_fallback = { '.git' }, append_default_schemas = true, loader = 'json' }) -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer local on_attach = function(client, bufnr) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end client.server_capabilities.semanticTokensProvider = nil -- Enable completion triggered by buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. local opts = { noremap=true, silent=true } -- See `:help vim.lsp.*` for documentation on any of the below functions buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) buf_set_keymap('n', 'e', 'lua vim.diagnostic.get()', opts) buf_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) buf_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) buf_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) -- buf_set_keymap('n', 'gh', 'lua require(\'lspsaga.provider\').lsp_finder()', opts) -- buf_set_keymap('n', 'ca', 'lua require(\'lspsaga.codeaction\').code_action()', opts) -- buf_set_keymap('v', 'ca', ':lua require(\'lspsaga.codeaction\').range_code_action()', opts) -- buf_set_keymap('n', 'K', 'lua require(\'lspsaga.hover\').render_hover_doc()', opts) -- buf_set_keymap('n', 'rn', 'lua require(\'lspsaga.rename\').rename()', opts) -- buf_set_keymap('n', 'gs', 'lua require(\'lspsaga.signaturehelp\').signature_help()', opts) -- buf_set_keymap('n', 'gd', 'lua require(\'lspsaga.provider\').preview_definition()', opts) -- buf_set_keymap('n', 'gd', 'lua require(\'lspsaga.provider\').preview_definition()', opts) end -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local servers = { 'ansiblels', -- 'arduino_language_server', 'bashls', -- 'ccls', 'clangd', 'erlangls', 'eslint', 'gdscript', -- 'ruby_lsp', 'solargraph', 'stylelint_lsp', 'ts_ls', 'zls', } -- Setup lspconfig. local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { flags = { debounce_text_changes = 1000, }, on_attach = on_attach, capabilities = capabilities } end nvim_lsp.elixirls.setup{ cmd = { "elixir-ls" }, on_attach = on_attach, capabilities = capabilities } -- nvim_lsp.rust_analyzer.setup({ -- cmd = { "rust-analyzer" }, -- on_attach = on_attach, -- capabilities = capabilities, -- settings = { -- ["rust-analyzer"] = { -- assist = { -- importGranularity = "module", -- importPrefix = "by_self", -- }, -- cargo = { -- loadOutDirsFromCheck = true -- }, -- procMacro = { -- enable = true -- }, -- } -- } -- }) nvim_lsp.tailwindcss.setup({ on_attach = on_attach, capabilities = capabilities, settings = { tailwindCSS = { emmetCompletions = true, } } }) -- require('rust-tools').setup({ -- tools = { -- rust-tools options -- autoSetHints = true, -- hover_with_actions = true, -- inlay_hints = { -- -- show_parameter_hints = false, -- -- parameter_hints_prefix = "", -- -- other_hints_prefix = "", -- }, -- }, -- -- -- all the opts to send to nvim-lspconfig -- -- these override the defaults set by rust-tools.nvim -- -- see https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#rust_analyzer -- server = { -- -- on_attach is a callback called when the language server attachs to the buffer -- on_attach = on_attach, -- settings = { -- -- to enable rust-analyzer settings visit: -- -- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc -- ["rust-analyzer"] = { -- -- enable clippy on save -- checkOnSave = { -- allTargets = false, -- command = "clippy" -- }, -- } -- } -- }, -- }) -- textDocument/diagnostic support until 0.10.0 is released _timers = {} local function setup_diagnostics(client, buffer) if require("vim.lsp.diagnostic")._enable then return end local diagnostic_handler = function() local params = vim.lsp.util.make_text_document_params(buffer) client.request("textDocument/diagnostic", { textDocument = params }, function(err, result) if err then local err_msg = string.format("diagnostics error - %s", vim.inspect(err)) vim.lsp.log.error(err_msg) end local diagnostic_items = {} if result then diagnostic_items = result.items end vim.lsp.diagnostic.on_publish_diagnostics( nil, vim.tbl_extend("keep", params, { diagnostics = diagnostic_items }), { client_id = client.id } ) end) end diagnostic_handler() -- to request diagnostics on buffer when first attaching vim.api.nvim_buf_attach(buffer, false, { on_lines = function() if _timers[buffer] then vim.fn.timer_stop(_timers[buffer]) end _timers[buffer] = vim.fn.timer_start(200, diagnostic_handler) end, on_detach = function() if _timers[buffer] then vim.fn.timer_stop(_timers[buffer]) end end, }) end -- nvim_lsp.ruby_lsp.setup({ -- on_attach = function(client, buffer) -- setup_diagnostics(client, buffer) -- end, -- }) -- Setup nvim-cmp. local cmp = require('cmp') local luasnip = require('luasnip') local has_words_before = function() local line, col = unpack(vim.api.nvim_win_get_cursor(0)) return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil end cmp.setup({ experimental = { ghost_text = { hl_group = 'Comment' } }, snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) -- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. luasnip.lsp_expand(args.body) -- For `luasnip` users. -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users. -- require'snippy'.expand_snippet(args.body) -- For `snippy` users. end, }, mapping = { [''] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), [''] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }), [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() elseif has_words_before() then cmp.complete() else fallback() end end, { 'i', 's' }), [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, { 'i', 's' }), [''] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close(), }), }, sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'luasnip' }, -- For luasnip users. }, { { name = 'buffer' }, }) }) -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline('/', { sources = { { name = 'buffer' } } }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(':', { sources = cmp.config.sources({ { name = 'path' } }, { { name = 'cmdline' } }) }) require("neo-tree").setup({ close_if_last_window = false, -- Close Neo-tree if it is the last window left in the tab popup_border_style = "rounded", enable_git_status = false, enable_diagnostics = false, sort_case_insensitive = false, -- used when sorting files and directories in the tree sort_function = nil , -- use a custom function for sorting files and directories in the tree -- sort_function = function (a,b) -- if a.type == b.type then -- return a.path > b.path -- else -- return a.type > b.type -- end -- end , -- this sorts files and directories descendantly default_component_configs = { container = { enable_character_fade = false }, indent = { indent_size = 2, padding = 1, -- extra padding on left hand side -- indent guides with_markers = true, indent_marker = "│", last_indent_marker = "└", highlight = "NeoTreeIndentMarker", -- expander config, needed for nesting files with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders expander_collapsed = "", expander_expanded = "", expander_highlight = "NeoTreeExpander", }, icon = { folder_closed = "▸", folder_open = "▾", folder_empty = " ", -- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there -- then these will never be used. default = "", highlight = "NeoTreeFileIcon" }, modified = { symbol = "[+]", highlight = "NeoTreeModified", }, name = { trailing_slash = false, use_git_status_colors = false, highlight = "NeoTreeFileName", }, git_status = { symbols = { -- Change type added = "", -- or "✚", but this is redundant info if you use git_status_colors on the name modified = "", -- or "", but this is redundant info if you use git_status_colors on the name deleted = "✖",-- this can only be used in the git_status source renamed = "",-- this can only be used in the git_status source -- Status type untracked = "", ignored = "", unstaged = "", staged = "", conflict = "", } }, }, filesystem = { filtered_items = { visible = false, never_show = { ".git", ".keep", ".gitkeep", }, }, window = { mappings = { ["/"] = false, ["D"] = false, }, }, }, window = { position = "left", width = 40, mapping_options = { noremap = true, nowait = true, }, mappings = { [""] = "open", ["C"] = "cut_to_clipboard", ["i"] = "toggle_hidden", ["x"] = "close_node", ["X"] = "close_all_nodes", ["z"] = false, ["Z"] = false, ["c"] = { "copy", config = { show_path = "relative" }}, ["m"] = { "move", config = { show_path = "relative" }}, ["a"] = { "add", config = { show_path = "relative" }}, }, }, }) require('leap').set_default_keymaps() -- require('neotest').setup({ -- icons = { -- -- Ascii: -- -- { "/", "|", "\\", "-", "/", "|", "\\", "-"}, -- -- Unicode: -- -- { "", "🞅", "🞈", "🞉", "", "", "🞉", "🞈", "🞅", "", }, -- -- {"◴" ,"◷" ,"◶", "◵"}, -- -- {"◢", "◣", "◤", "◥"}, -- -- {"◐", "◓", "◑", "◒"}, -- -- {"◰", "◳", "◲", "◱"}, -- -- {"⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"}, -- -- {"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}, -- -- {"⠋", "⠙", "⠚", "⠞", "⠖", "⠦", "⠴", "⠲", "⠳", "⠓"}, -- -- {"⠄", "⠆", "⠇", "⠋", "⠙", "⠸", "⠰", "⠠", "⠰", "⠸", "⠙", "⠋", "⠇", "⠆"}, -- -- { "⠋", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠦", "⠖", "⠒", "⠐", "⠐", "⠒", "⠓", "⠋" }, -- running_animated = {"⣷", "⣯", "⣟", "⡿", "⢿", "⣻", "⣽", "⣾"}, -- passed = " ", -- running = " ", -- failed = " ", -- skipped = "-", -- unknown = "🞅", -- non_collapsible = "─", -- collapsed = "─", -- expanded = "╮", -- child_prefix = "├", -- final_child_prefix = "╰", -- child_indent = "│", -- final_child_indent = " ", -- }, -- adapters = { -- require('neotest-rspec')({ -- rspec_cmd = function() -- return vim.tbl_flatten({ -- "rspec", -- }) -- end -- }) -- }, -- quickfix = { -- enabled = false, -- open = false -- }, -- }) -- local null_ls = require("null-ls") -- -- null_ls.setup({ -- sources = { -- null_ls.builtins.formatting.stylua, -- null_ls.builtins.completion.spell, -- null_ls.builtins.diagnostics.eslint, -- null_ls.builtins.diagnostics.rubocop, -- }, -- }) -- map("n", "tn", ":lua require('neotest').run.run()", { noremap = false, silent = false }) -- buf_set_keymap('n', 'tn', 'lua require('neotest').run.run()', opts) -- buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) EOF " neotest keybindings " nnoremap tn lua require("neotest").run.run() " nnoremap ts lua require("neotest").run.stop() " nnoremap tf lua require("neotest").run.run(vim.fn.expand("%")) " nnoremap tt lua require("neotest").summary.open() " nnoremap ta lua require("neotest").run.attach() " nnoremap to lua require("neotest").output.open({ enter = true }) " nnoremap [n lua require("neotest").jump.prev({ status = "failed" }) " nnoremap ]n lua require("neotest").jump.next({ status = "failed" }) let test#strategy = "neovim" let g:test#preserve_screen = 1 let g:test#neovim#start_normal = 1 " If using neovim strategy let g:test#basic#start_normal = 1 " If using basic strategy let g:test#ruby#bundle_exec = 0 nnoremap tn :TestNearest nnoremap tf :TestFile nnoremap ts :TestSuite " EditorConfig let g:EditorConfig_exclude_patterns = ['fugitive://.*', 'scp://.*'] " NeoTree silent! nmap :NeoTreeShowToggle silent! map :NeoTreeReveal " Lightline let g:lightline = { \ 'colorscheme': 'gruvbox', \ 'component_function': { \ 'gitbranch': 'FugitiveHead' \ }, \ } let g:lightline.component_expand = { \ 'linter_hints': 'lightline#lsp#hints', \ 'linter_infos': 'lightline#lsp#infos', \ 'linter_warnings': 'lightline#lsp#warnings', \ 'linter_errors': 'lightline#lsp#errors', \ 'linter_ok': 'lightline#lsp#ok', \ } let g:lightline.component_type = { \ 'linter_hints': 'right', \ 'linter_infos': 'right', \ 'linter_warnings': 'warning', \ 'linter_errors': 'error', \ 'linter_ok': 'right', \ } let g:lightline.active = { \ 'left': [ [ 'mode', 'paste' ], \ [ 'gitbranch', 'readonly', 'filename', 'modified' ]], \ 'right': [ [ 'lineinfo' ], \ [ 'percent' ], \ [ 'fileformat', 'fileencoding', 'filetype' ], \ [ 'linter_errors', 'linter_warnings', 'linter_infos', 'linter_hints', 'linter_ok' ]] \ } set shell=fish " Terminal tnoremap command Term split term://fish let g:neoterm_autoinsert = 1 let g:neoterm_default_mod = 'rightbelow' let g:neoterm_size = '20' " Vim gitgutter " let g:gitgutter_enabled = 1 " let g:gitgutter_signs = 1 " let g:gitgutter_sign_added = '+' " let g:gitgutter_sign_modified = '~' " let g:gitgutter_sign_removed = '-' " let g:gitgutter_sign_removed_first_line = '-' " let g:gitgutter_sign_modified_removed = '~' " let g:gitgutter_highlight_linenrs = 1 " let g:gitgutter_highlight_lines = 1 " Replace current word with yanked or deleted text " nnoremap S "_diwP " tagbar nmap :TagbarToggle let g:tagbar_type_rust = { \ 'ctagstype' : 'rust', \ 'kinds' : [ \'T:types,type definitions', \'f:functions,function definitions', \'g:enum,enumeration names', \'s:structure names', \'m:modules,module names', \'c:consts,static constants', \'t:traits', \'i:impls,trait implementations', \] \} let g:tagbar_type_ruby = { \ 'kinds' : [ \ 'm:modules', \ 'c:classes', \ 'd:describes', \ 'C:contexts', \ 'f:methods', \ 'F:singleton methods' \ ] \} let g:tagbar_type_gdscript = { \ 'ctagstype' :'gdscript', \ 'kinds': [ \ 'v:variables', \ 'f:functions', \ ] \ } " vim-autoformat let g:autoformat_autoindent = 1 let g:autoformat_retab = 1 let g:autoformat_remove_trailing_spaces = 1 " Vimwiki " let g:vimwiki_list = [{'path': '~/vimwiki/', 'syntax': 'markdown', 'ext': '.md'}] " FIXME: this is strange workaround for workaround for bug in kitty " autocmd FileType vimwiki nnoremap wH VimwikiGoBackLink " vim-markdown let g:markdown_syntax_conceal = 0 " Taskwiki " let g:taskwiki_markup_syntax = "markdown" " let g:taskwiki_source_tw_colors = "yes" " nnoremap tR :TaskWikiBufferLoad set noswapfile set ofu=syntaxcomplete#Complete set ts=2 " Tabs are 2 spaces set bs=2 " Backspace over everything in insert mode set shiftwidth=2 " Tabs under smart indent set cf " Enable error files & error jumping. set clipboard=unnamed " Yanks go on clipboard instead. set nu " Line numbers on set relativenumber set wrap set linebreak " set timeoutlen=250 " Time to wait after ESC (default causes an annoying delay) set cmdheight=1 set updatetime=300 set hlsearch " Highlight searches set re=0 " set lazyredraw set redrawtime=1000 " Search set ignorecase smartcase " Ignore case of searches set cinoptions=:0,p0,t0 set cinwords=if,else,while,do,for,switch,case,begin set formatoptions=tcqr set cindent set expandtab set colorcolumn=80,120 set nostartofline " Don’t reset cursor to start of line when moving around. set noeol " Don’t add empty newlines at the end of files autocmd InsertEnter * set cursorline " Show cursor line in insert mode autocmd InsertLeave * set nocursorline " Hide cursor line in insert mode " Set updatetime for CursorHold " 300ms of no cursor movement to trigger CursorHold set updatetime=1000 " Show diagnostic popup on cursor hold autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false }) " Visual set showmatch " Show matching brackets. set mat=5 " Bracket blinking. " Show $ at end of line and trailing space as ~ set novisualbell " No blinking . set noerrorbells " No noise. " Invisibles set list listchars=tab:▸·,trail:·,nbsp:· " Use one space, not two, after punctuation. set nojoinspaces " Disable folding set nofoldenable " Disable mouse set mouse= " Disable some keys noremap noremap noremap noremap noremap noremap noremap noremap inoremap inoremap inoremap inoremap " Open new split panes to right and bottom, which feels more natural set splitbelow set splitright set completeopt=menuone,noinsert,noselect set signcolumn=yes " Quicker window movement nnoremap j nnoremap k nnoremap h nnoremap l " telescope nnoremap lua require('telescope.builtin').find_files() nnoremap g lua require('telescope.builtin').live_grep() nnoremap b lua require('telescope.builtin').buffers() nnoremap h lua require('telescope.builtin').help_tags() " FZF " let g:fzf_layout = { 'down': '50%' } " let g:fzf_vim = {} " let g:fzf_vim.listproc = { list -> fzf#vim#listproc#quickfix(list) } " let g:fzf_vim.preview_window = ['right,50%', 'ctrl-/'] " " function! s:build_quickfix_list(lines) " call setqflist(map(copy(a:lines), '{ "filename": v:val, "lnum": 1 }')) " copen " cc " endfunction " " let g:fzf_action = { " \ 'ctrl-q': function('s:build_quickfix_list'), " \ 'ctrl-t': 'tab split', " \ 'ctrl-x': 'split', " \ 'ctrl-v': 'vsplit' } " " nnoremap :FZF " nnoremap g :Rg " LSP SEMANTIC HIGHLIGHTS " hi @lsp.type.variable guifg=GruvboxFg1 " hi @lsp.type.class guifg=GruvboxYellow