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-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' } " file tree Plug 'Xuyuanp/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' } 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... " telescope. Needed for octo.nvim, might replace fzf Plug 'nvim-lua/popup.nvim' Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' Plug 'pwntester/octo.nvim' " {{{ 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-vetur', { '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 'marlonfan/coc-phpls', { 'do': 'yarn install --frozen-lockfile' } Plug 'fannheyward/coc-sql', { 'do': 'yarn install --frozen-lockfile' } Plug 'fannheyward/coc-markdownlint', { 'do': 'yarn install --frozen-lockfile' } Plug 'josa42/coc-go', { 'do': 'yarn install --frozen-lockfile' } Plug 'fannheyward/coc-pyright', { 'for': 'python', '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 'heavenshell/vim-jsdoc', { 'for': [ 'javascript', 'typescript', 'vue' ], 'do': 'make install'} " Generate JSDoc comments 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']} "}}} " 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 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 set pyxversion=3 " 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 " 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 "}}} " P L U G I N S{{{ let g:languagetool_server="/opt/LanguageTool/LanguageTool-5.0/languagetool-server.jar" let g:languagetool_jar="/opt/LanguageTool/LanguageTool-5.0/languagetool-commandline.jar" let NERDTreeShowHidden=1 if exists('g:started_by_firenvim') let g:airline_disable_statusline = 1 else let g:airline_powerline_fonts = 1 end " notational notes let g:nv_search_paths = ['~/notes'] let g:nv_default_extension = '.md' let g:nv_main_directory = '~/notes' " Octo.nvim lua require('octo') " ALE {{{ let g:airline#extensions#ale#enabled = 1 "}}} let vim_tags_ctags_binary='~/bin/phpctags'" " Java config autocmd FileType java setlocal omnifunc=javacomplete#Complete " Python-mode config let g:pymode_lint_on_write = 0 " Vimtex{{{ if !exists('g:neocomplete#sources#omni#input_patterns') let g:neocomplete#sources#omni#input_patterns = {} endif let g:neocomplete#sources#omni#input_patterns.tex = \ '\v\\%(' \ . '\a*%(ref|cite)\a*%(\s*\[[^]]*\])?\s*\{[^{}]*' \ . '|includegraphics%(\s*\[[^]]*\])?\s*\{[^{}]*' \ . '|%(include|input)\s*\{[^{}]*' \ . ')' "}}} " C/C++ {{{ autocmd FileType c,cpp,objc nnoremap 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 " Use tab for trigger completion with characters ahead and navigate. " Use command ':verbose imap ' to make sure tab is not mapped by other plugin. inoremap \ pumvisible() ? "\" : \ check_back_space() ? "\" : \ coc#refresh() inoremap pumvisible() ? "\" : "\" 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 to confirm completion, `u` means break undo chain at current position. " Coc only does snippet and additional edit on confirm. inoremap pumvisible() ? "\" : "\u\" " 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) " For conceal markers. if has('conceal') set conceallevel=2 concealcursor=niv endif let g:neosnippet#snippets_directory = '~/.dotfiles/vim/neosnippets' "}}} " Treesitter {{{ lua <