set nocompatible " be iMproved, required filetype off " required " Section Plugins {{{ " Load vim-plug if empty(glob("~/.config/nvim/autoload/plug.vim")) execute '!curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' endif call plug#begin() Plug 'tpope/vim-fugitive' " Git integration Plug 'tpope/vim-rhubarb' " Github integration Plug 'tpope/vim-sensible' " Defaults everyone can agree on Plug 'tpope/vim-surround' " better handling of surrounding markers Plug 'tpope/vim-ragtag' " Enhancement of surround for html Plug 'tpope/vim-repeat' " repeat last command with . Plug 'scrooloose/nerdtree', { 'on': ['NERDTreeToggle', 'NERDTreeFind'] } " file tree Plug 'Xuyuanp/nerdtree-git-plugin', { 'on': ['NERDTreeToggle', 'NERDTreeFind'] } Plug 'scrooloose/nerdcommenter' " better commenting Plug 'neoclide/coc.nvim', {'branch': 'release'} " coc - completion Plug 'easymotion/vim-easymotion' " better motion with leader Plug 'bling/vim-airline' " statusline Plug 'w0rp/ale' " asynchronous linting engine Plug 'godlygeek/tabular' " Align text on symbols Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } " fuzzy file finder Plug 'junegunn/fzf.vim' " vim integration for fzf Plug 'airblade/vim-gitgutter' " git status in gutter column Plug 'lambdalisue/suda.vim' " As w!! did not work anymore in nvim Plug 'https://github.com/alok/notational-fzf-vim' " note taking Plug 'prettier/vim-prettier', { 'do': 'npm install' } " prettier integration Plug 'honza/vim-snippets' " Collection of Snippets, used by coc-snippet "Plug 'ludovicchabant/vim-gutentags', { 'for': ['js', 'vue', 'php', 'python'] } " Keep tags in sync Plug 'dpelle/vim-LanguageTool', { 'for': ['markdown', 'tex', 'plaintext', 'mail']} " LanguageTool bindings Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " We recommend updating the parsers on update Plug 'nvim-treesitter/nvim-treesitter-textobjects' Plug 'kyazdani42/nvim-web-devicons' " Icons... Plug 'mfussenegger/nvim-dap', { 'for': ['typescript', 'javascript', 'python', 'rust'] } Plug 'lbrayner/vim-rzip' " recursive zip support, needed for yarn pnp Plug 'kkoomen/vim-doge', { 'do': { -> doge#install() } } Plug 'taybart/b64.nvim' " en/decode base64 strings " telescope. Needed for octo.nvim, might replace fzf Plug 'nvim-lua/popup.nvim' Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' } " improve sort performance Plug 'pwntester/octo.nvim' "Plug 'github/copilot.vim' " {{{ CocPlugins Plug 'neoclide/coc-json', { 'do': 'yarn install --frozen-lockfile' } Plug 'neoclide/coc-snippets', { 'do': 'yarn install --frozen-lockfile' } Plug 'neoclide/coc-tsserver', { 'do': 'yarn install --frozen-lockfile' } Plug 'neoclide/coc-eslint', { 'do': 'yarn install --frozen-lockfile' } Plug 'fannheyward/coc-rust-analyzer', { 'do': 'yarn install --frozen-lockfile' } Plug 'neoclide/coc-css', { 'do': 'yarn install --frozen-lockfile' } Plug 'neoclide/coc-vimtex', { 'do': 'yarn install --frozen-lockfile' } Plug 'fannheyward/coc-texlab', { 'do': 'yarn install --frozen-lockfile' } Plug 'neoclide/coc-html', { 'do': 'yarn install --frozen-lockfile' } Plug 'neoclide/coc-yaml', { 'do': 'yarn install --frozen-lockfile' } "Plug 'neoclide/coc-python', { 'do': 'yarn install --frozen-lockfile' } Plug 'fannheyward/coc-sql', { 'do': 'yarn install --frozen-lockfile' } Plug 'fannheyward/coc-markdownlint', { 'do': 'yarn install --frozen-lockfile' } Plug 'fannheyward/coc-pyright', { 'for': 'python', 'do': 'yarn install --frozen-lockfile' } Plug 'josa42/coc-sh', { 'do': 'yarn install --frozen-lockfile' } " }}} " html / templates{{{ Plug 'mattn/emmet-vim', { 'for': ['jinja.html', 'html', 'php', 'gohtmltmpl', 'vue', 'markdown'] } " emmet support for vim - easily create markdup wth CSS-like syntax Plug 'gregsexton/MatchTag', { 'for': ['html', 'php', 'gohtmltmpl', 'vue'] } " match tags in html, similar to paren support Plug 'othree/html5.vim', { 'for': ['html', 'php', 'gohtmltmpl', 'vue'] } " html5 support Plug 'lumiliet/vim-twig', { 'for': ['html'] } " twig syntax support Plug 'Glench/Vim-Jinja2-Syntax', { 'for': ['html'] } Plug 'jvanja/vim-bootstrap4-snippets', { 'for': ['html', 'blade'] } "}}} " JavaScript{{{ Plug 'gavocanov/vim-js-indent', { 'for': [ 'javascript' ]} " JavaScript indent support Plug 'posva/vim-vue', { 'for': [ 'javascript', 'html', 'vue' ] } " vue.js integration Plug 'kevinoid/vim-jsonc' "}}} " LaTeX{{{ Plug 'lervag/vimtex', { 'for': 'tex' } "}}} " Markdown{{{ Plug 'tpope/vim-markdown', { 'for': 'markdown'} Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app & yarn install', 'for': 'markdown' } "}}} " Colorschemes{{{ Plug 'altercation/vim-colors-solarized' Plug 'vim-scripts/nginx.vim' "}}} " TOML{{{ Plug 'cespare/vim-toml', { 'for': 'toml' } "}}} " C/C++{{{ Plug 'Rip-Rip/clang_complete', { 'for': ['c', 'cpp'], 'do': 'make install' } let g:clang_library_path='/usr/lib/llvm-6.0/lib/libclang-6.0.so.1' Plug 'rhysd/vim-clang-format', { 'for' : ['c', 'cpp', 'java'] } Plug 'vim-scripts/DoxygenToolkit.vim', { 'for' : ['c', 'cpp'] } "}}} " PHP{{{ Plug 'captbaritone/better-indent-support-for-php-with-html', { 'for': 'php' } Plug 'lumiliet/vim-twig', { 'for': [ 'php', 'html' ] } " Twig templates Plug 'Rican7/php-doc-modded', { 'for': 'php' } " Automatic phpdoc comments Plug 'jwalton512/vim-blade', { 'for': 'php' } "}}} " {{{ Python Plug 'jeetsukumaran/vim-pythonsense', { 'for': ['python'] } " text objects for python Plug 'heavenshell/vim-pydocstring', { 'for': ['python'], 'do': 'make install' } Plug 'anntzer/vim-cython', { 'for': ['python']} Plug 'python-rope/ropevim' "}}} "{{{ CSV Plug 'chrisbra/csv.vim', { 'for': 'csv' } "}}} " All of your Plugins must be added before the following line call plug#end() " required filetype plugin indent on " required " }}} " THEME{{{ colorscheme solarized set background=dark " Use light theme if whole shell is in light mode let themeenv=$THEME_SWITCHER if themeenv=='light' set background=light endif " }}} " SETTINGS{{{ " disable Ex mode, who needs this anyway? noremap Q set number " line numbers set autoread " reload file automatically set colorcolumn=100 " highlight column 99 set textwidth=99 set smartcase "use smart case like in ripgrep (case insensitive until capital letters are used) set history=1000 set wildignore+=node_modules " ignore node_modules folder from file search set inccommand=split " show interactive results of substiute command " make comments and HTML attributes italic highlight Comment cterm=italic highlight htmlArg cterm=italic set autoindent " automatically set indent of new line set smartindent set tabstop=4 set shiftwidth=4 set expandtab " toggle invisible characters set list set listchars=tab:→\ ,trail:⋅,extends:❯,precedes:❮ set showbreak=↪ set ttyfast " faster redrawing set diffopt+=vertical set laststatus=2 " show the satus line all the time set so=7 " set 7 lines to the cursors - when moving vertical set wildmenu " enhanced command line completion set hidden " current buffer can be put into background set showcmd " show incomplete commands " set noshowmode " don't show which mode disabled for PowerLine set wildmode=list:longest " complete files like a shell set scrolloff=3 " lines of text around cursor set shell=$SHELL set cmdheight=1 " command bar height set title " set terminal title set mouse=nv set foldmethod=marker" " folds are marked with {{{}}} " Uncomment the following to have Vim jump to the last position when " reopening a file if has("autocmd") if expand('%:t') != 'COMMIT_EDITMSG' au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") \| exe "normal! g'\"" | endif endif endif " Setting for correct mips syntax highlighting au BufReadPost *.mips set syntax=mips " Override default flavor to latex, so vimtex gets loaded always let g:tex_flavor = "latex" " use python 3 when in doubt let g:python3_host_prog="/home/schneider/.pyenv/versions/neovim3/bin/python" set pyxversion=3 " nodejs settings "let g:node_host_prog="/usr/bin/node" " Disable ALEs LSP, as we're using coc let g:ale_disable_lsp = 1 " }}} " MAPPINGS{{{ let mapleader = "," " CtrlP for Tags nnoremap :CtrlPTag " fzf bindings "nmap :Files nmap :Tags nmap / :Rg "nmap b :Buffers " Telescope Bindings nmap :lua require("telescope.builtin").find_files({find_command={"fd","--type=f","-H", "-E=.git", "-E=.yalc", "-E=node_modules"}}) "nmap :Telescope fd nmap b :lua require('telescope.builtin').buffers({ sort_mru = true, ignore_current_buffer = true }) nmap / :Telescope live_grep " Toggle NERDTree nmap k :NERDTreeToggle " expand to the path of the file in the current buffer nmap y :NERDTreeFind " Allow saving of files as sudo when I forgot to start vim using sudo. cmap w!! :w suda://% "Toggle set paste nmap tp :set paste! " scroll the viewport faster nnoremap 3 nnoremap 3 " ctrl-r in visual mode to replace selected text vnoremap "hy:%s/h//g nmap an :ALENext nnoremap tn :tabnew nnoremap :Git nnoremap :Git push vnoremap be :lua require("b64").encode() vnoremap bd :lua require("b64").decode() "}}} " {{{ Textobjects lua <f :ClangFormat autocmd FileType c,cpp,objc vnoremap f :ClangFormat "}}} " Prettier let g:prettier#config#tab_width = 4 let g:prettier#exec_cmd_async = 1 " Completion {{{ " if hidden is not set, TextEdit might fail. set hidden " Some servers have issues with backup files, see #649 set nobackup set nowritebackup " Better display for messages set cmdheight=2 " You will have bad experience for diagnostic messages when it's default 4000. set updatetime=300 " don't give |ins-completion-menu| messages. set shortmess+=c " always show signcolumns set signcolumn=yes " {{{ coc completion "Use and to navigate completion list: function! CheckBackSpace() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~ '\s' endfunction inoremap coc#pum#visible() ? coc#_select_confirm() \: "\u\\=coc#on_enter()\" " Insert when previous text is space, refresh completion if not. inoremap \ coc#pum#visible() ? coc#pum#next(1): \ CheckBackSpace() ? "\" : \ coc#refresh() inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" "}}} function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use to trigger completion. inoremap coc#refresh() " Use `[c` and `]c` to navigate diagnostics nmap [c (coc-diagnostic-prev) nmap ]c (coc-diagnostic-next) " Remap keys for gotos nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) " Use K to show documentation in preview window nnoremap H :call show_documentation() function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand('') else call CocAction('doHover') endif endfunction " Highlight symbol under cursor on CursorHold autocmd CursorHold * silent call CocActionAsync('highlight') " Remap for rename current word nmap rn (coc-rename) " Remap for format selected region xmap f (coc-format-selected) nmap f (coc-format-selected) augroup mygroup autocmd! " Setup formatexpr specified filetype(s). autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Update signature help on jump placeholder autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') augroup end " Remap for do codeAction of selected region, ex: `aap` for current paragraph xmap a (coc-codeaction-selected) nmap a (coc-codeaction-selected) " Remap for do codeAction of current line nmap ac (coc-codeaction) " Fix autofix problem of current line nmap qf (coc-fix-current) " Use for select selections ranges, needs server support, like: coc-tsserver, coc-python "nmap (coc-range-select) "xmap (coc-range-select) "xmap (coc-range-select-backward) " Use `:Format` to format current buffer command! -nargs=0 Format :call CocAction('format') " Use `:Fold` to fold current buffer command! -nargs=? Fold :call CocAction('fold', ) " use `:OR` for organize import of current buffer command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') " Add status line support, for integration with other plugin, checkout `:h coc-status` set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} " Using CocList " Show all diagnostics nnoremap a :CocList diagnostics " Manage extensions nnoremap e :CocList extensions " Show commands nnoremap c :CocList commands " Find symbol of current document nnoremap o :CocList outline " Search workspace symbols nnoremap s :CocList -I symbols " Do default action for next item. nnoremap j :CocNext " Do default action for previous item. nnoremap k :CocPrev " Resume latest coc list nnoremap p :CocListResume: " snippets imap (coc-snippets-expand-jump) let g:neosnippet#snippets_directory = '~/.dotfiles/vim/neosnippets' "}}} " Treesitter {{{ lua <