Skip to content

Instantly share code, notes, and snippets.

@hnq90
Last active April 12, 2020 07:14
Show Gist options
  • Select an option

  • Save hnq90/da1a9f5991763ca00b15f44bb579d93c to your computer and use it in GitHub Desktop.

Select an option

Save hnq90/da1a9f5991763ca00b15f44bb579d93c to your computer and use it in GitHub Desktop.

Revisions

  1. hnq90 revised this gist Apr 12, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions .vimrc
    Original file line number Diff line number Diff line change
    @@ -687,6 +687,7 @@ Plug 'machakann/vim-highlightedyank'
    Plug 'kana/vim-textobj-user'
    Plug 'beloglazov/vim-textobj-quotes'
    Plug 'tpope/vim-dispatch'
    Plug 'neoclide/coc.nvim', {'branch': 'release'}

    call plug#end()
    " }}}
  2. hnq90 created this gist Apr 12, 2020.
    692 changes: 692 additions & 0 deletions .vimrc
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,692 @@
    " vim:fdm=marker

    " Settings -------------------------------------------------------------

    " Preamble {{{

    " Make vim more useful {{{
    set nocompatible
    " }}}

    " Syntax highlighting {{{
    set t_Co=256
    set background=dark
    syntax on
    " colorscheme solarized
    " }}}

    " Mapleader {{{
    let mapleader=","
    " }}}

    " Local directories {{{
    set backupdir=~/.vim/backups
    set directory=~/.vim/swaps
    set undodir=~/.vim/undo
    " }}}

    " Set some junk {{{
    set autoindent " Copy indent from last line when starting new line
    set backspace=indent,eol,start
    set cursorline " Highlight current line
    set diffopt=filler " Add vertical spaces to keep right and left aligned
    set diffopt+=iwhite " Ignore whitespace changes (focus on code changes)
    set encoding=utf-8 nobomb " BOM often causes trouble
    set esckeys " Allow cursor keys in insert mode
    set expandtab " Expand tabs to spaces
    set foldcolumn=0 " Column to show folds
    " set foldenable " Enable folding
    set foldlevel=0 " Close all folds by default
    set foldmethod=syntax " Syntax are used to specify folds
    set foldminlines=0 " Allow folding single lines
    set foldnestmax=5 " Set max fold nesting level
    set formatoptions=
    set formatoptions+=c " Format comments
    set formatoptions+=r " Continue comments by default
    set formatoptions+=o " Make comment when using o or O from comment line
    set formatoptions+=q " Format comments with gq
    set formatoptions+=n " Recognize numbered lists
    set formatoptions+=2 " Use indent from 2nd line of a paragraph
    set formatoptions+=l " Don't break lines that are already long
    set formatoptions+=1 " Break before 1-letter words
    set gdefault " By default add g flag to search/replace. Add g to toggle
    set hidden " When a buffer is brought to foreground, remember undo history and marks
    set history=1000 " Increase history from 20 default to 1000
    set hlsearch " Highlight searches
    set ignorecase " Ignore case of searches
    set incsearch " Highlight dynamically as pattern is typed
    set laststatus=2 " Always show status line
    set lazyredraw " Don't redraw when we don't have to
    set lispwords+=defroutes " Compojure
    set lispwords+=defpartial,defpage " Noir core
    set lispwords+=defaction,deffilter,defview,defsection " Ciste core
    set lispwords+=describe,it " Speclj TDD/BDD
    set magic " Enable extended regexes
    set mouse=a " Enable mouse in all in all modes
    set noerrorbells " Disable error bells
    set nojoinspaces " Only insert single space after a '.', '?' and '!' with a join command
    set noshowmode " Don't show the current mode (airline.vim takes care of us)
    set nostartofline " Don't reset cursor to start of line when moving around
    set nowrap " Do not wrap lines
    set nu " Enable line numbers
    set ofu=syntaxcomplete#Complete " Set omni-completion method
    " set regexpengine=1 " Use the old regular expression engine (it's faster for certain language syntaxes)
    set report=0 " Show all changes
    set ruler " Show the cursor position
    set scrolloff=3 " Start scrolling three lines before horizontal border of window
    set shell=/bin/sh " Use /bin/sh for executing shell commands
    set shiftwidth=2 " The # of spaces for indenting
    set shortmess=atI " Don't show the intro message when starting vim
    set showtabline=2 " Always show tab bar
    set sidescrolloff=3 " Start scrolling three columns before vertical border of window
    set smartcase " Ignore 'ignorecase' if search patter contains uppercase characters
    set smarttab " At start of line, <Tab> inserts shiftwidth spaces, <Bs> deletes shiftwidth spaces
    set softtabstop=2 " Tab key results in 2 spaces
    set splitbelow " New window goes below
    set splitright " New windows goes right
    set suffixes=.bak,~,.swp,.swo,.o,.d,.info,.aux,.log,.dvi,.pdf,.bin,.bbl,.blg,.brf,.cb,.dmg,.exe,.ind,.idx,.ilg,.inx,.out,.toc,.pyc,.pyd,.dll
    set switchbuf=""
    set title " Show the filename in the window titlebar
    set ttyfast " Send more characters at a given time
    set ttymouse=xterm " Set mouse type to xterm
    set undofile " Persistent Undo
    set viminfo=%,'9999,s512,n~/.vim/viminfo " Restore buffer list, marks are remembered for 9999 files, registers up to 512Kb are remembered
    set visualbell " Use visual bell instead of audible bell (annnnnoying)
    set wildchar=<TAB> " Character for CLI expansion (TAB-completion)
    set wildignore+=.DS_Store
    set wildignore+=*.jpg,*.jpeg,*.gif,*.png,*.gif,*.psd,*.o,*.obj,*.min.js
    set wildignore+=*/bower_components/*,*/node_modules/*
    set wildignore+=*/smarty/*,*/vendor/*,*/.git/*,*/.hg/*,*/.svn/*,*/.sass-cache/*,*/log/*,*/tmp/*,*/build/*,*/ckeditor/*,*/doc/*,*/source_maps/*,*/dist/*
    set wildmenu " Hitting TAB in command mode will show possible completions above command line
    set wildmode=list:longest " Complete only until point of ambiguity
    set winminheight=0 " Allow splits to be reduced to a single line
    set wrapscan " Searches wrap around end of file
    " }}}

    " }}}

    " No folden please
    set nofen

    " Configuration -------------------------------------------------------------

    " FastEscape {{{
    " Speed up transition from modes
    if ! has('gui_running')
    set ttimeoutlen=10
    augroup FastEscape
    autocmd!
    au InsertEnter * set timeoutlen=0
    au InsertLeave * set timeoutlen=1000
    augroup END
    endif
    " }}}

    " General {{{
    augroup general_config
    autocmd!

    " Speed up viewport scrolling {{{
    nnoremap <C-e> 3<C-e>
    nnoremap <C-y> 3<C-y>
    " }}}

    " Faster split resizing (+,-) {{{
    if bufwinnr(1)
    map + <C-W>+
    map - <C-W>-
    endif
    " }}}

    " Better split switching (Ctrl-j, Ctrl-k, Ctrl-h, Ctrl-l) {{{
    map <C-j> <C-W>j
    map <C-k> <C-W>k
    map <C-H> <C-W>h
    map <C-L> <C-W>l
    " }}}

    " Sudo write (,W) {{{
    noremap <leader>W :w !sudo tee %<CR>
    " }}}

    " Get output of shell commands {{{
    command! -nargs=* -complete=shellcmd R new | setlocal buftype=nofile bufhidden=hide noswapfile | r !<args>
    " }}}

    " Remap :W to :w {{{
    command! W w
    " }}}

    " Better mark jumping (line + col) {{{
    nnoremap ' `
    " }}}

    " Hard to type things {{{
    iabbrev >> →
    iabbrev << ←
    iabbrev ^^ ↑
    iabbrev VV ↓
    iabbrev aa λ
    " }}}

    " Toggle show tabs and trailing spaces (,c) {{{
    set lcs=tab:›\ ,trail:·,eol:¬,nbsp:_
    set fcs=fold:-
    nnoremap <silent> <leader>c :set nolist!<CR>
    " }}}

    " Clear last search (,qs) {{{
    map <silent> <leader>qs <Esc>:noh<CR>
    " map <silent> <leader>qs <Esc>:let @/ = ""<CR>
    " }}}

    " Vim on the iPad {{{
    if &term == "xterm-ipad"
    nnoremap <Tab> <Esc>
    vnoremap <Tab> <Esc>gV
    onoremap <Tab> <Esc>
    inoremap <Tab> <Esc>`^
    inoremap <Leader><Tab> <Tab>
    endif
    " }}}

    " Remap keys for auto-completion menu {{{
    inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
    inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"
    inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"
    " }}}

    " Paste toggle (,p) {{{
    set pastetoggle=<leader>p
    map <leader>p :set invpaste paste?<CR>
    " }}}

    " Yank from cursor to end of line {{{
    nnoremap Y y$
    " }}}

    " Insert newline {{{
    map <leader><Enter> o<ESC>
    " }}}

    " Search and replace word under cursor (,*) {{{
    nnoremap <leader>* :%s/\<<C-r><C-w>\>//<Left>
    vnoremap <leader>* "hy:%s/\V<C-r>h//<left>
    " }}}

    " Strip trailing whitespace (,ss) {{{
    function! StripWhitespace () " {{{
    let save_cursor = getpos(".")
    let old_query = getreg('/')
    :%s/\s\+$//e
    call setpos('.', save_cursor)
    call setreg('/', old_query)
    endfunction " }}}
    noremap <leader>ss :call StripWhitespace ()<CR>
    " }}}

    " Join lines and restore cursor location (J) {{{
    nnoremap J mjJ`j
    " }}}

    " Toggle folds (<Space>) {{{
    nnoremap <silent> <space> :exe 'silent! normal! '.((foldclosed('.')>0)? 'zMzx' : 'zc')<CR>
    " }}}

    " Fix page up and down {{{
    map <PageUp> <C-U>
    map <PageDown> <C-D>
    imap <PageUp> <C-O><C-U>
    imap <PageDown> <C-O><C-D>
    " }}}

    " Relative numbers {{{
    set relativenumber " Use relative line numbers. Current line is still in status bar.
    au BufReadPost,BufNewFile * set relativenumber
    " }}}
    augroup END
    " }}}

    " NERD Commenter {{{
    augroup nerd_commenter
    autocmd!

    let NERDSpaceDelims=1
    let NERDCompactSexyComs=1
    let g:NERDCustomDelimiters = { 'racket': { 'left': ';', 'leftAlt': '#|', 'rightAlt': '|#' } }
    augroup END
    " }}}

    " Buffers {{{
    augroup buffer_control
    autocmd!

    " Prompt for buffer to select (,bs) {{{
    nnoremap <leader>bs :CtrlPBuffer<CR>
    " }}}

    " Buffer navigation (,,) (gb) (gB) (,ls) {{{
    map <Leader>, <C-^>
    map <Leader>ls :buffers<CR>
    map gb :bnext<CR>
    map gB :bprev<CR>
    " }}}

    " Jump to buffer number (<N>gb) {{{
    let c = 1
    while c <= 99
    execute "nnoremap " . c . "gb :" . c . "b\<CR>"
    let c += 1
    endwhile
    " }}}

    " Close Quickfix window (,qq) {{{
    map <leader>qq :cclose<CR>
    " }}}
    augroup END
    " }}}

    " Jumping to tags {{{
    augroup jump_to_tags
    autocmd!

    " Basically, <c-]> jumps to tags (like normal) and <c-\> opens the tag in a new
    " split instead.
    "
    " Both of them will align the destination line to the upper middle part of the
    " screen. Both will pulse the cursor line so you can see where the hell you
    " are. <c-\> will also fold everything in the buffer and then unfold just
    " enough for you to see the destination line.
    nnoremap <c-]> <c-]>mzzvzz15<c-e>`z:Pulse<cr>
    nnoremap <c-\> <c-w>v<c-]>mzzMzvzz15<c-e>`z:Pulse<cr>
    " Pulse Line (thanks Steve Losh)
    function! s:Pulse() " {{{
    redir => old_hi
    silent execute 'hi CursorLine'
    redir END
    let old_hi = split(old_hi, '\n')[0]
    let old_hi = substitute(old_hi, 'xxx', '', '')

    let steps = 8
    let width = 1
    let start = width
    let end = steps * width
    let color = 233

    for i in range(start, end, width)
    execute "hi CursorLine ctermbg=" . (color + i)
    redraw
    sleep 6m
    endfor
    for i in range(end, start, -1 * width)
    execute "hi CursorLine ctermbg=" . (color + i)
    redraw
    sleep 6m
    endfor

    execute 'hi ' . old_hi
    endfunction " }}}

    command! -nargs=0 Pulse call s:Pulse()
    augroup END
    " }}}

    " Highlight Interesting Words {{{
    augroup highlight_interesting_word
    autocmd!
    " This mini-plugin provides a few mappings for highlighting words temporarily.
    "
    " Sometimes you're looking at a hairy piece of code and would like a certain
    " word or two to stand out temporarily. You can search for it, but that only
    " gives you one color of highlighting. Now you can use <leader>N where N is
    " a number from 1-6 to highlight the current word in a specific color.
    function! HiInterestingWord(n) " {{{
    " Save our location.
    normal! mz

    " Yank the current word into the z register.
    normal! "zyiw

    " Calculate an arbitrary match ID. Hopefully nothing else is using it.
    let mid = 86750 + a:n

    " Clear existing matches, but don't worry if they don't exist.
    silent! call matchdelete(mid)

    " Construct a literal pattern that has to match at boundaries.
    let pat = '\V\<' . escape(@z, '\') . '\>'

    " Actually match the words.
    call matchadd("InterestingWord" . a:n, pat, 1, mid)

    " Move back to our original location.
    normal! `z
    endfunction " }}}

    " Mappings {{{
    nnoremap <silent> <leader>1 :call HiInterestingWord(1)<cr>
    nnoremap <silent> <leader>2 :call HiInterestingWord(2)<cr>
    nnoremap <silent> <leader>3 :call HiInterestingWord(3)<cr>
    nnoremap <silent> <leader>4 :call HiInterestingWord(4)<cr>
    nnoremap <silent> <leader>5 :call HiInterestingWord(5)<cr>
    nnoremap <silent> <leader>6 :call HiInterestingWord(6)<cr>
    " }}}

    " Default Highlights {{{
    hi def InterestingWord1 guifg=#000000 ctermfg=16 guibg=#ffa724 ctermbg=214
    hi def InterestingWord2 guifg=#000000 ctermfg=16 guibg=#aeee00 ctermbg=154
    hi def InterestingWord3 guifg=#000000 ctermfg=16 guibg=#8cffba ctermbg=121
    hi def InterestingWord4 guifg=#000000 ctermfg=16 guibg=#b88853 ctermbg=137
    hi def InterestingWord5 guifg=#000000 ctermfg=16 guibg=#ff9eb8 ctermbg=211
    hi def InterestingWord6 guifg=#000000 ctermfg=16 guibg=#ff2c4b ctermbg=195
    " }}}
    augroup END
    " }}}

    " Word Processor Mode {{{
    augroup word_processor_mode
    autocmd!

    function! WordProcessorMode() " {{{
    setlocal formatoptions=t1
    map j gj
    map k gk
    setlocal smartindent
    setlocal spell spelllang=en_ca
    setlocal noexpandtab
    setlocal wrap
    setlocal linebreak
    Goyo 100
    endfunction " }}}
    com! WP call WordProcessorMode()
    augroup END
    " }}}

    " Restore Cursor Position {{{
    augroup restore_cursor
    autocmd!

    autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \ exe "normal! g`\"" |
    \ endif
    augroup END
    " }}}


    " Filetypes -------------------------------------------------------------

    " C {{{
    augroup filetype_c
    autocmd!

    " Highlight Custom C Types {{{
    autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') . '/types.vim'
    autocmd BufRead,BufNewFile *.[ch] if filereadable(fname)
    autocmd BufRead,BufNewFile *.[ch] exe 'so ' . fname
    autocmd BufRead,BufNewFile *.[ch] endif
    " }}}
    augroup END
    " }}}

    " Clojure {{{
    augroup filetype_clojure
    autocmd!
    let g:vimclojure#ParenRainbow = 1 " Enable rainbow parens
    let g:vimclojure#DynamicHighlighting = 1 " Dynamic highlighting
    let g:vimclojure#FuzzyIndent = 1 " Names beginning in 'def' or 'with' to be indented as if they were included in the 'lispwords' option
    augroup END
    " }}}

    " Coffee {{{
    augroup filetype_coffee
    autocmd!
    au BufNewFile,BufReadPost *.coffee setl foldmethod=indent nofoldenable
    augroup END
    " }}}

    " Fish {{{
    augroup filetype_fish
    autocmd!
    au BufRead,BufNewFile *.fish set ft=fish
    augroup END
    " }}}

    " Handlebars {{{
    augroup filetype_hbs
    autocmd!
    au BufRead,BufNewFile *.hbs,*.handlebars,*.hbs.erb,*.handlebars.erb setl ft=mustache syntax=mustache
    augroup END
    " }}}

    " Jade {{{
    augroup filetype_jade
    autocmd!
    au BufRead,BufNewFile *.jade set ft=jade syntax=jade
    augroup END
    " }}}

    " JavaScript {{{
    augroup filetype_javascript
    autocmd!
    let g:javascript_conceal = 1
    augroup END
    " }}}

    " JSON {{{
    augroup filetype_json
    autocmd!
    au BufRead,BufNewFile *.json set ft=json syntax=javascript
    augroup END
    " }}}

    " Markdown {{{
    augroup filetype_markdown
    autocmd!
    let g:markdown_fenced_languages = ['ruby', 'html', 'javascript', 'css', 'erb=eruby.html', 'bash=sh']
    augroup END
    " }}}

    " Nu {{{
    augroup filetype_nu
    autocmd!
    au BufNewFile,BufRead *.nu,*.nujson,Nukefile setf nu
    augroup END
    " }}}

    " Ruby {{{
    augroup filetype_ruby
    autocmd!

    au BufRead,BufNewFile Rakefile,Capfile,Gemfile,.autotest,.irbrc,*.treetop,*.tt set ft=ruby syntax=ruby

    " Ruby.vim {{{
    let ruby_operators = 1
    let ruby_space_errors = 1
    let ruby_fold = 1
    " }}}
    augroup END
    " }}}

    " }}}
    " XML {{{
    "augroup filetype_xml
    " autocmd!
    " au FileType xml exe ":silent 1,$!xmllint --format --recover - 2>/dev/null"
    "augroup END
    " }}}

    " ZSH {{{
    augroup filetype_zsh
    autocmd!
    au BufRead,BufNewFile .zsh_rc,.functions,.commonrc set ft=zsh
    augroup END
    " }}}


    " Plugin Configuration -------------------------------------------------------------

    " Airline.vim {{{
    augroup airline_config
    autocmd!
    let g:airline_powerline_fonts = 1
    let g:airline#extensions#syntastic#enable = 1
    let g:airline#extensions#tabline#buffer_nr_format = '%s '
    let g:airline#extensions#tabline#buffer_nr_show = 1
    let g:airline#extensions#tabline#enabled = 1
    let g:airline#extensions#tabline#fnamecollapse = 0
    let g:airline#extensions#tabline#fnamemod = ':t'
    augroup END
    " }}}

    " CtrlP.vim {{{
    augroup ctrlp_config
    autocmd!
    let g:ctrlp_clear_cache_on_exit = 0 " Do not clear filenames cache, to improve CtrlP startup
    let g:ctrlp_lazy_update = 350 " Set delay to prevent extra search
    let g:ctrlp_match_func = { 'match': 'pymatcher#PyMatch' } " Use python fuzzy matcher for better performance
    let g:ctrlp_match_window_bottom = 0 " Show at top of window
    let g:ctrlp_max_files = 0 " Set no file limit, we are building a big project
    let g:ctrlp_switch_buffer = 'Et' " Jump to tab AND buffer if already open
    let g:ctrlp_open_new_file = 'r' " Open newly created files in the current window
    let g:ctrlp_open_multiple_files = 'ij' " Open multiple files in hidden buffers, and jump to the first one
    augroup END
    " }}}

    " Silver Searcher {{{
    augroup ag_config
    autocmd!

    if executable("ag")
    " Note we extract the column as well as the file and line number
    set grepprg=ag\ --nogroup\ --nocolor\ --column
    set grepformat=%f:%l:%c%m

    " Have the silver searcher ignore all the same things as wilgignore
    let b:ag_command = 'ag %s -i --nocolor --nogroup'

    for i in split(&wildignore, ",")
    let i = substitute(i, '\*/\(.*\)/\*', '\1', 'g')
    let b:ag_command = b:ag_command . ' --ignore "' . substitute(i, '\*/\(.*\)/\*', '\1', 'g') . '"'
    endfor

    let b:ag_command = b:ag_command . ' --hidden -g ""'
    let g:ctrlp_user_command = b:ag_command
    endif
    augroup END
    " }}}

    " EasyAlign.vim {{{
    augroup easy_align_config
    autocmd!
    vmap <Enter> <Plug>(EasyAlign) " Start interactive EasyAlign in visual mode (e.g. vip<Enter>)
    nmap <Leader>a <Plug>(EasyAlign) " Start interactive EasyAlign for a motion/text object (e.g. <Leader>aip)
    augroup END
    " }}}

    " Notes.vim {{{
    augroup notes_config
    autocmd!
    let g:notes_directories = ['~/Dropbox/Notes']
    augroup END
    " }}}

    " RainbowParenthesis.vim {{{
    augroup rainbow_parenthesis_config
    autocmd!
    nnoremap <leader>rp :RainbowParenthesesToggle<CR>
    augroup END
    " }}}

    " Syntastic.vim {{{
    augroup syntastic_config
    autocmd!
    let g:syntastic_error_symbol = ''
    let g:syntastic_warning_symbol = ''
    let g:syntastic_ruby_checkers = ['mri', 'rubocop']
    augroup END
    " }}}


    " Plugins -------------------------------------------------------------

    " Load plugins {{{
    call plug#begin('~/.vim/plugged')

    Plug 'ap/vim-css-color'
    Plug 'bling/vim-airline'
    Plug 'FelikZ/ctrlp-py-matcher'
    Plug 'guns/vim-clojure-static'
    Plug 'joker1007/vim-ruby-heredoc-syntax'
    Plug 'junegunn/vim-easy-align'
    Plug 'junegunn/vim-emoji'
    Plug 'junegunn/goyo.vim'
    Plug 'kchmck/vim-coffee-script'
    Plug 'ctrlpvim/ctrlp.vim'
    Plug 'kien/rainbow_parentheses.vim'
    Plug 'msanders/snipmate.vim'
    Plug 'mustache/vim-mustache-handlebars'
    Plug 'nathanaelkane/vim-indent-guides'
    Plug 'oplatek/Conque-Shell'
    Plug 'pangloss/vim-javascript'
    Plug 'rking/ag.vim'
    Plug 'scrooloose/nerdcommenter'
    Plug 'scrooloose/syntastic'
    Plug 'slim-template/vim-slim', { 'for': 'slim' }
    Plug 'thoughtbot/vim-rspec'
    Plug 'tpope/vim-fugitive'
    Plug 'tpope/vim-haml'
    Plug 'tpope/vim-markdown', { 'for': 'markdown' }
    Plug 'tpope/vim-rails'
    Plug 'tpope/vim-repeat'
    Plug 'tpope/vim-surround'
    Plug 'vim-ruby/vim-ruby'
    Plug 'vim-scripts/fish.vim', { 'for': 'fish' }
    Plug 'vim-scripts/jade.vim', { 'for': 'jade' }
    Plug 'wavded/vim-stylus', { 'for': 'stylus' }
    Plug 'wlangstroth/vim-racket'
    Plug 'xolox/vim-misc'
    Plug 'xolox/vim-notes'
    Plug 'tpope/vim-fugitive'
    Plug 'altercation/vim-colors-solarized'
    Plug 'airblade/vim-gitgutter'
    Plug 'flazz/vim-colorschemes'
    Plug 'editorconfig/editorconfig-vim'
    Plug 'pangloss/vim-javascript'
    Plug 'mxw/vim-jsx'
    Plug 'isruslan/vim-es6'
    Plug 'justinj/vim-react-snippets'
    Plug 'jbgutierrez/vim-babel'
    Plug 'jaxbot/syntastic-react'
    Plug 'vim-airline/vim-airline'
    Plug 'vim-airline/vim-airline-themes'
    Plug 'ntpeters/vim-better-whitespace'
    Plug 'jiangmiao/auto-pairs'
    Plug 'alvan/vim-closetag'
    Plug 'tomtom/tcomment_vim'
    Plug 'tommcdo/vim-lion'
    Plug 'easymotion/vim-easymotion'
    Plug 'baspar/vim-cartographe'
    Plug 'scrooloose/nerdtree'
    Plug 'terryma/vim-multiple-cursors'
    Plug 'junegunn/vim-peekaboo'
    Plug 'mhinz/vim-startify'
    Plug 'leafgarland/typescript-vim'
    Plug 'MaxMEllon/vim-jsx-pretty', {'for': ['typescript', 'javascript', 'typescriptreact', 'javascriptreact']}
    Plug 'jparise/vim-graphql'
    Plug 'sheerun/vim-polyglot'
    Plug 'mbbill/undotree'
    Plug 'tpope/vim-repeat'
    Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
    Plug 'junegunn/fzf.vim'
    Plug 'tpope/vim-fugitive'
    Plug 'junegunn/gv.vim'
    Plug 'machakann/vim-sandwich'
    Plug 'machakann/vim-highlightedyank'
    Plug 'kana/vim-textobj-user'
    Plug 'beloglazov/vim-textobj-quotes'
    Plug 'tpope/vim-dispatch'

    call plug#end()
    " }}}