if empty(glob('~/.config/nvim/autoload/plug.vim'))" silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif call plug#begin('~/.config/nvim/bundle') " colorscheme (temporary) Plug 'https://github.com/marko-cerovac/material.nvim' let g:material_style = 'lighter' " evaluating " #nvim-treesitter {{{ " https://github.com/nvim-treesitter/nvim-treesitter Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " update the parsers on update " config needs to be after call to plug#end " Treesitter uses a different parser for every language, which needs to be generated " If the language is already supported by nvim-treesitter, you can install it with " :TSInstall " - can use tab completion with this " Parsers not on this list can be added manually " " If you update nvim-treesitter and want to make sure the parser is at the latest compatible version (as specified in nvim-treesitter's lockfile.json), use " :TSUpdate {language}. " To update all parsers unconditionally, use " :TSUpdate all or just :TSUpdate. " " Each module provides a distinct tree-sitter-based feature such as highlighting, indentation, or folding; see :h nvim-treesitter-modules or "Available modules" below for a list of modules and their options. " All modules are disabled by default and need to be activated explicitly in your init.vim " " Each module can also be enabled or disabled interactively through the following commands: " :TSBufEnable {module} " enable module on current buffer " :TSBufDisable {module} " disable module on current buffer " :TSEnableAll {module} [{ft}] " enable module on every buffer. If filetype is specified, enable only for this filetype. " :TSDisableAll {module} [{ft}] " disable module on every buffer. If filetype is specified, disable only for this filetype. " :TSModuleInfo [{module}] " list information about modules state for each filetype " " Check :h nvim-treesitter-commands for a list of all available commands. It may be necessary to reload the buffer (e.g., via :e) after enabling a module interactively. "}}} " #playground (temporary) {{{ " https://github.com/nvim-treesitter/playground Plug 'nvim-treesitter/playground' "}}} " #vim-lspconfig {{{ " https://github.com/neovim/nvim-lspconfig " https://github.com/neovim/nvim-lspconfig/wiki Plug 'neovim/nvim-lspconfig' " setings after plug#end "}}} " #nvim-cmp {{{ " https://github.com/hrsh7th/nvim-cmp/ " completion Plug 'hrsh7th/nvim-cmp' Plug 'hrsh7th/cmp-nvim-lsp' Plug 'hrsh7th/cmp-buffer' Plug 'hrsh7th/cmp-path' " Plug 'hrsh7th/cmp-nvim-ultisnips' "}}} " keeping " #vim-hexokinase {{{ " https://github.com/chrisbra/Colorizer " display colors asynchronously Plug 'chrisbra/Colorizer' " let g:colorizer_use_virtual_text = 1 nnoremap cc :ColorToggle "}}} " #delimitMate{{{ " https://github.com/Raimondi/delimitMate " automatic quote, paranthesis,etc closing. Plug 'Raimondi/delimitMate' let delimitMate_expand_cr = 1 let delimitMate_expand_space = 1 "}}} " #emmet-vim {{{ " https://github.com/mattn/emmet-vim Plug 'mattn/emmet-vim' let g:user_emmet_leader_key=',,' let g:user_emmet_settings = { \ 'indentation': ' ', \} "}}} " #gitgutter {{{ " https://github.com/airblade/vim-gitgutter/blob/master/README.mkd " show git diff in sign column Plug 'airblade/vim-gitgutter' nmap ]h (GitGutterNextHunk) nmap [h (GitGutterPrevHunk) omap ih (GitGutterTextObjectInnerPending) omap ah (GitGutterTextObjectOuterPending) xmap ih (GitGutterTextObjectInnerVisual) xmap ah (GitGutterTextObjectOuterVisual) "}}} " #MatchTagAlways{{{ " always highlights xml/html tags enclosing cursor " https://github.com/Valloric/MatchTagAlways Plug 'Valloric/MatchTagAlways' let g:mta_filetypes = { \ 'jinja' : 1, \ 'html' : 1, \ 'vue' : 1, \ 'xhtml' : 1, \ 'xml' : 1, \} "}}} " #quickscope{{{ " highlights unique characters when using f, F, etc " https://github.com/unblevable/quick-scope Plug 'unblevable/quick-scope' let g:qs_highlight_on_keys = ['f', 'F', 't', 'T'] "}}} " #switch {{{ "https://github.com/AndrewRadev/switch.vim Plug 'AndrewRadev/switch.vim' let g:switch_mapping = '-' let g:switch_custom_definitions = [ \ ['0', '1'], \ ['ease-in', 'ease-out', 'ease-in-out', 'linear'], \ ['auto', 'none'], \ ['left', 'right'], \ ['top', 'bottom'], \ ['row', 'column'], \ ['relative', 'absolute', 'fixed'], \ ['private', 'public', 'protected'] \ ] "}}} " #ultisnips {{{ " https://github.com/sirver/UltiSnips Plug 'SirVer/ultisnips' " and some snippets " https://github.com/honza/vim-snippets " Plug 'honza/vim-snippets' nnoremap ul :call ListUltisnips() inoremap jkul :call ListUltisnips() let g:UltiSnipsSnippetsDir='~/.vim/UltiSnips' " Trigger configuration. Do not use if you use https://github.com/Valloric/YouCompleteMe. let g:UltiSnipsExpandTrigger='' let g:UltiSnipsJumpForwardTrigger='' let g:UltiSnipsJumpBackwardTrigger='' let g:UltiSnipsEditSplit='horizontal' function! ListUltisnips() abort"{{{ let l:snips = UltiSnips#SnippetsInCurrentScope(1) let l:keylist = sort(keys(l:snips)) echo ' --------------------------------------------------' for l:key in l:keylist echo printf(" %-10s\t%s", l:key, l:snips[l:key]) endfor echo '---------------------------------------------------' endfunction "}}} function! CompleteSnippets(findstart, base)"{{{ if a:findstart let l:line = getline('.') let l:start = col('.') - 1 while l:start > 0 && l:line[l:start - 1] =~ '\a' let l:start -= 1 endwhile return l:start else let l:res = [] let l:snips = UltiSnips#SnippetsInCurrentScope(1) let l:keylist = sort(keys(l:snips)) for l:key in l:keylist if l:key =~ '^' . a:base let l:item = {'word': l:key, 'menu': l:snips[l:key]} call add(l:res, l:item) endif endfor return l:res endif endfunction "}}} set completefunc=CompleteSnippets "}}} " #Netrw {{{ let g:netrw_liststyle=3 let g:netrw_list_hide=netrw_gitignore#Hide() let g:netrw_preview = 0 let g:netrw_winsize = 50 let g:netrw_altv = &spr let g:netrw_alto = 1 let g:netrw_altfile = 1 let g:netrw_mousemaps = 0 "}}} " #Obsession{{{ " fork of tpope/vim-obsession Plug 'studio-vx/vim-obsession' "}}} " #tcomment_vim{{{ " https://github.com/tomtom/tcomment_vim Plug 'tomtom/tcomment_vim' "}}} " #vim-rsi{{{ "https://github.com/tpope/vim-rsi Plug 'tpope/vim-rsi' "}}} " #wakatime{{{ " https://wakatime.com/vim Plug 'wakatime/vim-wakatime' "}}} " #vim-repeat{{{ " https://github.com/tpope/vim-repeat " makes repeat . work for more stuff Plug 'tpope/vim-repeat' "}}} " #vim-surround{{{ Plug 'tpope/vim-surround' "}}} " reconfigure and learn to use properly " #vim-fzf {{{ " https://github.com/junegunn/fzf.vim Plug 'junegunn/fzf' Plug 'junegunn/fzf.vim' nnoremap fg :GFiles nnoremap ff :Files nnoremap fh :History nnoremap ft :Tags nnoremap fb :Buffers nnoremap fH :Helptags let g:fzf_preview_window = 'right:60%' let g:fzf_colors = \ { 'fg': ['fg', 'Normal'], \ 'bg': ['bg', 'Normal'], \ 'hl': ['fg', 'Label'], \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], \ 'hl+': ['fg', 'WildMenu'], \ 'info': ['fg', 'Comment'], \ 'border': ['fg', 'Ignore'], \ 'prompt': ['fg', 'Constant'], \ 'pointer': ['fg', 'Special'], \ 'marker': ['fg', 'Keyword'], \ 'spinner': ['fg', 'Label'], \ 'header': ['fg', 'Comment'] } "}}} " #vim-shellcheck{{{ " https://github.com/itspriddle/vim-shellcheck Plug 'itspriddle/vim-shellcheck' "}}} " #vim-markdown{{{ " https://github.com/plasticboy/vim-markdown Plug 'plasticboy/vim-markdown' let g:vim_markdown_toc_autofit = 1 let g:vim_markdown_fenced_languages = ['bash=sh'] "}}} " #undotree {{{ Plug 'mbbill/undotree' nnoremap ut :UndotreeToggle "}}} " do i still need, can i replace? " #vim-dispatch{{{ " https://github.com/tpope/vim-dispatch Plug 'tpope/vim-dispatch' "}}} " #phpcomplete.vim{{{ " improved php completion " https://github.com/shawncplus/phpcomplete.vim Plug 'shawncplus/phpcomplete.vim' " https://github.com/dsawardekar/wordpress.vim " For up to date Wordpress Files see: " https://github.com/joseluis/wordpress.vim-generator "}}} " #vim-floaterm{{{ " https://github.com/voldikss/floaterm " allows to open floating terminal Plug 'voldikss/vim-floaterm' let g:floaterm_opener = 'edit' nnoremap lf :FloatermNew --height=0.9 --width=0.9 lf nnoremap lg :FloatermNew --height=0.9 --width=0.9 lazygit "}}} " #vim-Jinja2-Syntax{{{ " https://github.com/studio-vx/Vim-Jinja2-Syntax " original: https://github.com/Glench/Vim-Jinja2-Syntax Plug 'studio-vx/Vim-Jinja2-Syntax' "}}} " ------------------------------------------------------------------------------ call plug#end() runtime macros/matchit.vim " Configurations " #nvim-treesitter {{{ lua < :lua vim.lsp.buf.formatting_seq_sync({}, 1000)]] vim.cmd [[augroup END]] end end require "lspconfig".efm.setup { init_options = {documentFormatting = true}, on_attach = on_attach_efm, filetypes = {"javascript", "typescript", "json", "sh", "python"}, root_dir = function(fname) return util.root_pattern("tsconfig.json")(fname) or util.root_pattern(".eslintrc.js", ".git")(fname); end, settings = { rootMarkers = {".eslintrc.js", ".git/"}, languages = { javascript = {eslint}, typescript = {eslint}, json = {jq, fixjson}, python = {flake8, black}, sh = {shellcheck} } } } EOF " }}} " #nvim-lspconfig {{{ lua << EOF local nvim_lsp = require('lspconfig') -- 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 -- 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.lsp.diagnostic.show_line_diagnostics()', opts) buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) end -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local servers = { 'bashls', 'cssls', 'phpactor', 'pyright', 'stylelint_lsp', 'tailwindcss', 'tsserver', 'vimls', 'vuels' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach, flags = { debounce_text_changes = 150, } } end EOF "}}} " #cmp-nvim-ultisnips {{{ lua <'] = cmp.mapping.complete(), [''] = cmp.mapping.confirm({ select = true }), [''] = cmp.mapping.abort(), }, sources = { { name = 'buffer' }, { name = 'nvim_lsp' }, { name = 'path' }, --{ name = 'ultisnips' }, ... } }) EOF "}}} " vim: set fdm=marker ft=vim: