Skip to content

Instantly share code, notes, and snippets.

@neodevelop
Forked from lorenzosinisi/.vimrc
Created July 25, 2021 15:42
Show Gist options
  • Save neodevelop/0870de3bcd1f0ac0876e841bfd7f036b to your computer and use it in GitHub Desktop.
Save neodevelop/0870de3bcd1f0ac0876e841bfd7f036b to your computer and use it in GitHub Desktop.

Revisions

  1. @lorenzosinisi lorenzosinisi created this gist Dec 19, 2017.
    399 changes: 399 additions & 0 deletions .vimrc
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,399 @@
    """""""""""""""""""""""""""""""""""""
    " Lorenzo Sinisi Vimrc configuration
    """""""""""""""""""""""""""""""""""""
    set nocompatible
    syntax on
    set nowrap
    set ignorecase
    set smartcase
    set encoding=utf8
    set mouse=nicr
    set directory^="$HOME/.vim/tmp/"
    set colorcolumn=80
    """" START Vundle Configuration
    set nobackup

    " Disable file type for vundle
    filetype off " required

    " set the runtime path to include Vundle and initialize
    set rtp+=~/.vim/bundle/Vundle.vim
    call vundle#begin()

    " Delete a word with backspace
    imap <C-BS> <C-W>
    " let Vundle manage Vundle, required

    Plugin 'gmarik/Vundle.vim'
    " Utility
    Plugin 'scrooloose/nerdtree'
    Plugin 'ervandew/supertab'
    Plugin 'wincent/command-t'
    Plugin 'BufOnly.vim'
    Plugin 'wesQ3/vim-windowswap'
    Plugin 'SirVer/ultisnips'
    Plugin 'junegunn/fzf.vim'
    Plugin 'junegunn/fzf'
    Plugin 'godlygeek/tabular'
    Plugin 'ctrlpvim/ctrlp.vim'
    Plugin 'benmills/vimux'
    Plugin 'jeetsukumaran/vim-buffergator'
    Plugin 'gilsondev/searchtasks.vim'
    Plugin 'tpope/vim-dispatch'
    Plugin 'Shougo/neocomplete.vim'
    Plugin 'ntpeters/vim-better-whitespace'
    Plugin 'airblade/vim-gitgutter'
    Plugin 'valloric/youcompleteme'
    " Generic Programming Support
    Plugin 'honza/vim-snippets'
    Plugin 'Townk/vim-autoclose'
    Plugin 'tomtom/tcomment_vim'
    Plugin 'tobyS/vmustache'
    Plugin 'janko-m/vim-test'
    Plugin 'maksimr/vim-jsbeautify'
    Plugin 'vim-syntastic/syntastic'
    Plugin 'neomake/neomake'
    " Markdown / Writting
    Plugin 'reedes/vim-pencil'
    Plugin 'tpope/vim-markdown'
    Plugin 'jtratner/vim-flavored-markdown'
    Plugin 'LanguageTool'

    highlight ExtraWhitespace ctermbg=red
    " Git Support
    Plugin 'kablamo/vim-git-log'
    Plugin 'gregsexton/gitv'
    Plugin 'tpope/vim-fugitive'
    "Plugin 'jaxbot/github-issues.vim'
    " PHP Support

    Plugin 'phpvim/phpcd.vim'
    Plugin 'tobyS/pdv'

    " Erlang Support
    Plugin 'vim-erlang/vim-erlang-tags'
    Plugin 'vim-erlang/vim-erlang-runtime'
    Plugin 'vim-erlang/vim-erlang-omnicomplete'
    Plugin 'vim-erlang/vim-erlang-compiler'

    " Elixir Support
    Plugin 'elixir-lang/vim-elixir'
    Plugin 'avdgaag/vim-phoenix'
    Plugin 'mmorearty/elixir-ctags'
    Plugin 'mattreduce/vim-mix'
    Plugin 'BjRo/vim-extest'
    Plugin 'frost/vim-eh-docs'
    Plugin 'slashmili/alchemist.vim'
    Plugin 'jadercorrea/elixir_generator.vim'

    " Theme / Interface
    Plugin 'AnsiEsc.vim'
    "Plugin 'ryanoasis/vim-devicons'
    Plugin 'vim-airline/vim-airline'
    Plugin 'vim-airline/vim-airline-themes'
    Plugin 'sjl/badwolf'
    Plugin 'tomasr/molokai'
    Plugin 'morhetz/gruvbox'
    Plugin 'zenorocha/dracula-theme', {'rtp': 'vim/'}
    Plugin 'junegunn/limelight.vim'
    Plugin 'mkarmona/colorsbox'
    Plugin 'romainl/Apprentice'
    Plugin 'Lokaltog/vim-distinguished'
    Plugin 'chriskempson/base16-vim'
    Plugin 'w0ng/vim-hybrid'
    Plugin 'AlessandroYorba/Sierra'
    Plugin 'daylerees/colour-schemes'
    Plugin 'effkay/argonaut.vim'
    Plugin 'ajh17/Spacegray.vim'
    Plugin 'atelierbram/Base2Tone-vim'
    Plugin 'colepeters/spacemacs-theme.vim'
    Plugin 'mileszs/ack.vim'
    " OSX stupid backspace fix
    set backspace=indent,eol,start

    call vundle#end() " required
    filetype plugin indent on " required
    """" END Vundle Configuration

    """""""""""""""""""""""""""""""""""""
    " Configuration Section
    """""""""""""""""""""""""""""""""""""

    " Show linenumbers
    set number
    set ruler

    " Set Proper Tabs
    set tabstop=4
    set shiftwidth=4
    set smarttab
    set expandtab

    " Always display the status line
    set laststatus=2

    " Enable Elite mode, No ARRRROWWS!!!!
    let g:elite_mode=1

    " Enable highlighting of the current line
    "set cursorline

    " Theme and Styling
    set t_Co=256
    set background=dark
    set guifont=
    if (has("termguicolors"))
    set termguicolors
    endif

    let base16colorspace=256 " Access colors present in 256 colorspace
    colorscheme spacegray
    " colorscheme spacemacs-theme

    colorscheme spacegray
    let g:spacegray_underline_search = 1
    let g:spacegray_italicize_comments = 1

    highlight OverLength ctermbg=red ctermfg=white guibg=#592929
    match OverLength /\%81v.\+/

    " Vim-Airline Configuration
    let g:airline#extensions#tabline#enabled = 1
    let g:airline_powerline_fonts = 1
    let g:airline_theme='hybrid'
    let g:hybrid_custom_term_colors = 1
    let g:hybrid_reduced_contrast = 1

    " Syntastic Configuration
    set statusline+=%#warningmsg#
    set statusline+=%{SyntasticStatuslineFlag()}
    set statusline+=%*

    let g:syntastic_always_populate_loc_list = 1
    let g:syntastic_auto_loc_list = 1
    let g:syntastic_check_on_open = 1
    " let g:syntastic_check_on_wq = 0
    " let g:syntastic_enable_elixir_checker = 1
    " let g:syntastic_elixir_checkers = ["elixir"]

    " Neomake settings
    autocmd! BufWritePost * Neomake
    let g:neomake_elixir_enabled_makers = ['mix', 'credo', 'dogma']

    " Vim-PDV Configuration
    let g:pdv_template_dir = $HOME ."/.vim/bundle/pdv/templates_snip"

    " Markdown Syntax Support
    augroup markdown
    au!
    au BufNewFile,BufRead *.md,*.markdown setlocal filetype=ghmarkdown
    augroup END

    " Github Issues Configuration
    let g:github_access_token = "e6fb845bd306a3ca7f086cef82732d1d5d9ac8e0"

    " Vim-Alchemist Configuration
    let g:alchemist#elixir_erlang_src = "/Users/amacgregor/Projects/Github/alchemist-source"
    let g:alchemist_tag_disable = 1

    " Vim-Supertab Configuration
    let g:SuperTabDefaultCompletionType = "<C-X><C-O>"

    " Settings for Writting
    let g:pencil#wrapModeDefault = 'soft' " default is 'hard'
    let g:languagetool_jar = '/opt/languagetool/languagetool-commandline.jar'

    " Vim-pencil Configuration
    augroup pencil: 46 q!
    autocmd!
    autocmd FileType markdown,mkd call pencil#init()
    autocmd FileType text call pencil#init()
    augroup END

    " Vim-UtilSnips Configuration
    " Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe.
    let g:UltiSnipsExpandTrigger="<tab>"
    let g:UltiSnipsJumpForwardTrigger="<c-b>"
    let g:UltiSnipsJumpBackwardTrigger="<c-z>"
    let g:UltiSnipsEditSplit="vertical" " If you want :UltiSnipsEdit to split your window.
    set splitright
    " Vim-Test Configuration
    let test#strategy = "vimux"
    nnoremap <silent> <leader><space> :Files<CR>
    nnoremap <silent> <leader>a :Buffers<CR>
    nnoremap <silent> <leader>A :Windows<CR>
    nnoremap <silent> <leader>; :BLines<CR>
    nnoremap <silent> <leader>o :BTags<CR>
    nnoremap <silent> <leader>O :Tags<CR>
    nnoremap <silent> <leader>? :History<CR>
    nnoremap <silent> <leader>/ :Ag<CR>
    nnoremap <silent> <leader>ga :BCommits<CR>
    nnoremap <silent> <leader>ft :Filetypes<CR>
    imap <C-x><C-f> <plug>(fzf-complete-file-ag)
    let g:ackprg = 'ag --vimgrep'
    let g:ag_lhandler="botright lopen"
    imap <C-x><C-l> <plug>(fzf-complete-line)
    " Neocomplete Settings
    let g:acp_enableAtStartup = 0
    let g:neocomplete#enable_at_startup = 1
    let g:neocomplete#enable_smart_case = 1
    let g:neocomplete#sources#syntax#min_keyword_length = 3

    " Define dictionary.
    let g:neocomplete#sources#dictionary#dictionaries = {
    \ 'default' : '',
    \ 'vimshell' : $HOME.'/.vimshell_hist',
    \ 'scheme' : $HOME.'/.gosh_completions'
    \ }

    " Define keyword.
    if !exists('g:neocomplete#keyword_patterns')
    let g:neocomplete#keyword_patterns = {}
    endif

    let g:neocomplete#keyword_patterns['default'] = '\h\w*'
    function! s:my_cr_function()
    return (pumvisible() ? "\<C-y>" : "" ) . "\<CR>"
    " For no inserting <CR> key.
    "return pumvisible() ? "\<C-y>" : "\<CR>"
    endfunction


    " Enable omni completion.
    autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
    autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
    autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
    autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
    autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags

    " Enable heavy omni completion.
    if !exists('g:neocomplete#sources#omni#input_patterns')
    let g:neocomplete#sources#omni#input_patterns = {}
    endif
    "let g:neocomplete#sources#omni#input_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
    "let g:neocomplete#sources#omni#input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)'
    "let g:neocomplete#sources#omni#input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'

    " For perlomni.vim setting.
    " https://github.com/c9s/perlomni.vim
    let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::'

    " Elixir Tagbar Configuration
    let g:tagbar_type_elixir = {
    \ 'ctagstype' : 'elixir',
    \ 'kinds' : [
    \ 'f:functions',
    \ 'functions:functions',
    \ 'c:callbacks',
    \ 'd:delegates',
    \ 'e:exceptions',
    \ 'i:implementations',
    \ 'a:macros',
    \ 'o:operators',
    \ 'm:modules',
    \ 'p:protocols',
    \ 'r:records',
    \ 't:tests'
    \ ]
    \ }

    " Fzf Configuration
    " This is the default extra key bindings
    let g:fzf_action = {
    \ 'ctrl-t': 'tab split',
    \ 'ctrl-x': 'split',
    \ 'ctrl-v': 'vsplit' }

    " Default fzf layout
    " - down / up / left / right
    let g:fzf_layout = { 'down': '~40%' }

    " In Neovim, you can set up fzf window using a Vim command
    let g:fzf_layout = { 'window': 'enew' }
    let g:fzf_layout = { 'window': '-tabnew' }

    " Customize fzf colors to match your color scheme
    let g:fzf_colors =
    \ { 'fg': ['fg', 'Normal'],
    \ 'bg': ['bg', 'Normal'],
    \ 'hl': ['fg', 'Comment'],
    \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
    \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'],
    \ 'hl+': ['fg', 'Statement'],
    \ 'info': ['fg', 'PreProc'],
    \ 'prompt': ['fg', 'Conditional'],
    \ 'pointer': ['fg', 'Exception'],
    \ 'marker': ['fg', 'Keyword'],
    \ 'spinner': ['fg', 'Label'],
    \ 'header': ['fg', 'Comment'] }

    " Enable per-command history.
    " CTRL-N and CTRL-P will be automatically bound to next-history and
    " previous-history instead of down and up. If you don't like the change,
    " explicitly bind the keys to down and up in your $FZF_DEFAULT_OPTS.
    let g:fzf_history_dir = '~/.local/share/fzf-history'
    """""""""""""""""""""""""""""""""""""
    " Mappings configurationn
    """""""""""""""""""""""""""""""""""""
    map <C-n> :NERDTreeToggle<CR>
    map <C-m> :TagbarToggle<CR>
    " Omnicomplete Better Nav
    inoremap <expr> <c-j> ("\<C-n>")
    inoremap <expr> <c-k> ("\<C-p>")

    " <C-h>, <BS>: close popup and delete backword char.
    inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"
    inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"
    " Mapping selecting Mappings
    nmap <leader><tab> <plug>(fzf-maps-n)
    xmap <leader><tab> <plug>(fzf-maps-x)
    omap <leader><tab> <plug>(fzf-maps-o)
    " Shortcuts
    nnoremap <Leader>o :Files<CR>
    nnoremap <Leader>O :CtrlP<CR>
    nnoremap <Leader>w :w<CR>
    " Insert mode completion
    imap <c-x><c-k> <plug>(fzf-complete-word)
    imap <c-x><c-f> <plug>(fzf-complete-path)
    imap <c-x><c-j> <plug>(fzf-complete-file-ag)
    imap <c-x><c-l> <plug>(fzf-complete-line)
    " Vim-Test Mappings
    nmap <silent> <leader>t :TestNearest<CR>
    nmap <silent> <leader>T :TestFile<CR>
    nmap <silent> <leader>a :TestSuite<CR>
    nmap <silent> <leader>l :TestLast<CR>
    nmap <silent> <leader>g :TestVisit<CR>
    " Vim-PDV Mappings
    autocmd FileType php inoremap <C-p> <ESC>:call pdv#DocumentWithSnip()<CR>i
    autocmd FileType php nnoremap <C-p> :call pdv#DocumentWithSnip()<CR>
    autocmd FileType php setlocal omnifunc=phpcd#CompletePHP

    " Disable arrow movement, resize splits instead.
    if get(g:, 'elite_mode')
    nnoremap <Up> :resize +4<CR>
    nnoremap <Down> :resize -4<CR>
    nnoremap <Left> :vertical resize +4<CR>
    nnoremap <Right> :vertical resize -4<CR>
    endif

    highlight ExtraWhitespace ctermbg=red guibg=red
    match ExtraWhitespace /\s\+$/
    autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
    autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
    autocmd InsertLeave * match ExtraWhitespace /\s\+$/
    autocmd BufWinLeave * call clearmatches()


    " Advanced customization using autoload functions
    inoremap <expr> <c-x><c-k> fzf#vim#complete#word({'left': '15%'})
    " Vim-Alchemist Mappings
    autocmd FileType elixir nnoremap <buffer> <leader>h :call alchemist#exdoc()<CR>
    autocmd FileType elixir nnoremap <buffer> <leader>d :call alchemist#exdef()<CR>