Skip to content

Instantly share code, notes, and snippets.

@willmendesneto
Last active June 30, 2017 00:45
Show Gist options
  • Save willmendesneto/4e01e74cffd53d07ac0167c273038632 to your computer and use it in GitHub Desktop.
Save willmendesneto/4e01e74cffd53d07ac0167c273038632 to your computer and use it in GitHub Desktop.
""""""""""""""""""""""""""""""""
"
" PACKAGE MANAGEMENT
"
""""""""""""""""""""""""""""""""
" not a vi
" set encoding=utf-8
set nocompatible " be iMproved, required
filetype off " required
" start vundler
" filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" core plugins
Plugin 'gmarik/vundle'
Plugin 'flazz/vim-colorschemes'
Plugin 'kien/ctrlp.vim'
" vim main plugins
Plugin 'sjl/gundo.vim'
Plugin 'bling/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'jlanzarotta/bufexplorer'
Plugin 'scrooloose/syntastic.git'
Plugin 'vim-scripts/tComment'
Plugin 'tpope/vim-surround'
Plugin 'mileszs/ack.vim'
Plugin 'rking/ag.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'henrik/vim-indexed-search'
Plugin 'tpope/vim-abolish'
Plugin 'tpope/vim-repeat'
Plugin 'jiangmiao/auto-pairs'
Plugin 'xolox/vim-session'
Plugin 'xolox/vim-misc'
Plugin 'editorconfig/editorconfig-vim'
Plugin 'godlygeek/tabular'
Plugin 'airblade/vim-gitgutter'
Plugin 'Lokaltog/vim-easymotion'
Plugin 'rhysd/clever-f.vim'
" togglable panels
Plugin 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
Plugin 'tpope/vim-vinegar'
Plugin 'vim-scripts/taglist.vim'
Plugin 'majutsushi/tagbar'
" language vundles
Plugin 'pangloss/vim-javascript'
Plugin 'marijnh/tern_for_vim'
Plugin 'othree/javascript-libraries-syntax.vim'
Plugin 'leafgarland/typescript-vim'
Plugin 'fatih/vim-go'
Plugin 'klen/python-mode'
Plugin 'plasticboy/vim-markdown'
Plugin 'vim-scripts/c.vim'
Plugin 'tpope/vim-fireplace'
Plugin 'hylang/vim-hy'
" databases
Plugin 'vim-scripts/SQLUtilities'
Plugin 'NagatoPain/AutoSQLUpperCase.vim'
" autocomplete
Plugin 'Valloric/YouCompleteMe'
Plugin 'MarcWeber/vim-addon-mw-utils'
Plugin 'tomtom/tlib_vim'
" snippets
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
" enable all the plugins
call vundle#end()
filetype plugin indent on
""""""""""""""""""""""""""""""""
"
" SETTINGS & KEYBINDINGS
"
""""""""""""""""""""""""""""""""
set expandtab
set smarttab
set shiftwidth=2
set softtabstop=2
set tabstop=2
set autoindent
set ruler
set hidden
set ignorecase
set smartcase
set showmatch
set incsearch
set hls
set number
set ls=2
" set cursorline
set nowrap
set backspace=indent,eol,start
set shell=/bin/bash
set completeopt -=preview
set textwidth=100
set wildmenu
set noshowmode
set cmdheight=1
" set autoread
" backup/persistance settings
set undodir=~/.vim/tmp/undo//
set backupdir=~/.vim/tmp/backup//
set directory=~/.vim/tmp/swap//
set backupskip=/tmp/*,/private/tmp/*"
set backup
set writebackup
set noswapfile
" persist (g)undo tree between sessions
set undofile
set history=100
set undolevels=100
" set <leader>
let mapleader=","
" enable mouse
set mouse=a
" show trailing whitespaces
set list
set listchars=tab:▸\ ,trail:¬,nbsp:.,extends:❯,precedes:❮
augroup ListChars2
au!
autocmd filetype go set listchars+=tab:\ \
autocmd ColorScheme * hi! link SpecialKey Normal
augroup END
" syntax highlighting
syntax on
colorscheme molokai
" session management
let g:session_directory = "~/.vim/session"
let g:session_autoload = "no"
let g:session_autosave = "no"
let g:session_command_aliases = 1
nnoremap <leader>so :OpenSession
nnoremap <leader>ss :SaveSession
nnoremap <leader>sd :DeleteSession<CR>
nnoremap <leader>sc :CloseSession<CR>
" togglables without FN keys
nnoremap <leader>1 :GundoToggle<CR>
set pastetoggle=<leader>2
nnoremap <leader>3 :TlistToggle<CR>
nnoremap <leader>4 :TagbarToggle<CR>
nnoremap <leader>5 :NERDTreeToggle<CR>
" visual reselect of just pasted
nnoremap gp `[v`]
"make enter break and do newlines
nnoremap <CR> O<Esc>j
nnoremap <leader>j i<CR><Esc>==
"make space in normal mode add space
nnoremap <Space> i<Space><Esc>l
" better scrolling
nnoremap <C-j> <C-d>
nnoremap <C-k> <C-u>
" consistent menu navigation
inoremap <C-j> <C-n>
inoremap <C-k> <C-p>
" intellij style autocomplete shortcut
inoremap <C-@> <C-x><C-o>
inoremap <C-Space> <C-x><C-o>
" ctrlP config
let g:ctrlp_map = "<c-p>"
nnoremap <leader>t :CtrlPMRU<CR>
nnoremap <leader>bp :CtrlPBuffer<CR>
" easy motion rebinded
nmap <leader>f <Plug>(easymotion-f2)
nmap <leader>F <Plug>(easymotion-F2)
" open vimrc
nnoremap <leader>v :e ~/.config/nvim/init.vim<CR>
nnoremap <leader>V :tabnew ~/.config/nvim/init.vim<CR>
" reload all open buffers
nnoremap <leader>Ra :tabdo exec "windo e!"
"map next-previous jumps
nnoremap <leader>m <C-o>
nnoremap <leader>. <C-i>
" Keep search matches in the middle of the window.
nnoremap n nzzzv
nnoremap N Nzzzv
" Use sane regexes
nnoremap <leader>/ /\v
vnoremap <leader>/ /\v
" Use :Subvert search
nnoremap <leader>// :S /
vnoremap <leader>// :S /
" Use regular replace
nnoremap <leader>s :%s /
vnoremap <leader>s :%s /
" Use :Subvert replace
nnoremap <leader>S :%S /
vnoremap <leader>S :%S /
" clever-f prompt
let g:clever_f_show_prompt = 1
let g:clever_f_across_no_line = 1
" syntastic
let g:syntastic_python_checkers = []
" airline
if !exists("g:airline_symbols")
let g:airline_symbols = {}
endif
let g:airline_theme="powerlineish"
let g:airline_powerline_fonts=1
let g:airline#extensions#branch#empty_message = "no .git"
let g:airline#extensions#whitespace#enabled = 0
let g:airline#extensions#syntastic#enabled = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#fnamecollapse = 1 " /a/m/model.rb
let g:airline#extensions#hunks#non_zero_only = 1 " git gutter
" YouCompleteMe
" let g:ycm_path_to_python_interpreter = '/home/user/anaconda3/bin/python'
let g:ycm_filetype_blacklist = {}
let g:ycm_key_list_select_completion = []
let g:ycm_key_list_previous_completion = []
let g:ycm_key_invoke_completion = "<C-j>"
let g:ycm_collect_identifiers_from_tags_files = 1
if executable("ag")
let g:ackprg = "ag --nogroup --column"
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
endif
" reload ctags
nnoremap <leader>C :!ctags -R --fields=+l --exclude=.git --exclude=log --exclude=tmp *<CR><CR>
" git and ack stuff
let g:gitgutter_enabled = 1
let g:gitgutter_realtime = 0
let g:gitgutter_eager = 0
nnoremap <leader>G mG:Git!
nnoremap <leader>g :Git
nnoremap <leader>A :!ag
nnoremap <leader>a :Ag!
""""""""""""""""""""""""""""""""
"
" PROGRAMMING LANGUAGES
"
""""""""""""""""""""""""""""""""
" vim-go settings
let g:go_fmt_command = "goimports"
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
" vim-go bindings
augroup FileType go
au!
au FileType go nmap gd <Plug>(go-def)
au FileType go nmap <Leader>dd <Plug>(go-def-vertical)
au FileType go nmap <Leader>dv <Plug>(go-doc-vertical)
au FileType go nmap <Leader>db <Plug>(go-doc-browser)
au FileType go nmap <Leader>i <Plug>(go-info)
au FileType go nmap <leader>r <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>t <Plug>(go-test)
augroup END
" Python Settings
let g:pymode_rope = 1
let ropevim_enable_shortcuts = 1
let g:pymode_rope_lookup_project = 1
let g:pymode_rope_goto_def_newwin = "e"
let g:pymode_rope_completion = 1
let g:pymode_rope_complete_on_dot = 1
" Pymode Options
let g:pymode_python = 'python3'
let g:pymode_options_max_line_length = 100
let g:pymode_options_colorcolumn = 0
let g:pymode_folding = 0 " Turn off code folding
let g:pymode_virtualenv = 1 " Auto fix vim python paths if virtualenv enabled
let g:pymode_motion = 1 " Enable python objects and motion
let g:pymode_trim_whitespaces = 1 "Trim unused white spaces on save
let g:pymode_quickfix_minheight = 3
let g:pymode_quickfix_maxheight = 5
" debugging
let g:pymode_breakpoint = 1
" syntax highlighting
let g:pymode_syntax = 1
let g:pymode_syntax_all = 1
let g:pymode_syntax_indent_errors = g:pymode_syntax_all
let g:pymode_syntax_space_errors = g:pymode_syntax_all
let g:pymode_indent = 1
" linting
let g:pymode_lint = 1
let g:pymode_lint_cwindow = 0
let g:pymode_lint_message = 1
let g:pymode_lint_on_write = 1
let g:pymode_lint_unmodified = 0
let g:pymode_lint_on_fly = 1
let g:pymode_lint_checkers = ['pyflakes', 'pep8'] " 'mccabe']
let g:pymode_lint_signs = 1
"let g:pymode_lint_ignore = "E501,W"
let g:pymode_lint_sort = ['E','C']
" General file runners for various languages
function! LangRunner()
if(&ft=="python")
nnoremap <leader>r :!python %<cr>
elseif(&ft=="hy")
nnoremap <leader>r :!hy %<cr>
elseif(&ft=="clojure")
nnoremap <leader>r :!lein run<cr>
elseif(&ft=="ruby")
nnoremap <leader>r :!ruby %<cr>
elseif(&ft=="javascript")
nnoremap <leader>r :!node %<cr>
elseif(&ft=="php")
nnoremap <leader>r :!php %<cr>
elseif(&ft=="c")
nnoremap <leader>r :!make run<cr>
endif
endfunction
au BufEnter * call LangRunner()
" enable angular syntax
let g:used_javascript_libs = 'underscore,react,flux,redux,jquery,vue,angular'
" " json syntax handling in conjunction with vim-json plugin
" augroup json_autocmd
" autocmd!
" autocmd FileType json set autoindent
" autocmd FileType json set formatoptions=tcq2l
" autocmd FileType json set textwidth=78 shiftwidth=2
" autocmd FileType json set softtabstop=2 tabstop=8
" autocmd FileType json set expandtab
" autocmd FileType json set foldmethod=syntax
" augroup END
""""""""""""""""""""""""""""""""
"
" COOL HACKS
"
""""""""""""""""""""""""""""""""
" save all buffers and exit
nnoremap <Leader>q :xa<CR>
" Make sure Vim returns to the same line when you reopen a file.
augroup line_return
au!
au BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ execute 'normal! g`"zvzz' |
\ endif
augroup END
" Visual Mode */# from Scrooloose
function! s:VSetSearch()
let temp = @@
norm! gvy
let @/ = '\V' . substitute(escape(@@, '\'), '\n', '\\n', 'g')
let @@ = temp
endfunction
vnoremap * :<C-u>call <SID>VSetSearch()<CR>//<CR><c-o>
vnoremap # :<C-u>call <SID>VSetSearch()<CR>??<CR><c-o>
" Text Highlighter = <leader>h[1-4]
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
nnoremap <leader>hh :call clearmatches()<CR>:noh<CR>
nnoremap <silent> <leader>h1 :call HiInterestingWord(1)<cr>
nnoremap <silent> <leader>h2 :call HiInterestingWord(2)<cr>
nnoremap <silent> <leader>h3 :call HiInterestingWord(3)<cr>
nnoremap <silent> <leader>h4 :call HiInterestingWord(4)<cr>
nnoremap <silent> <leader>h5 :call HiInterestingWord(5)<cr>
nnoremap <silent> <leader>h6 :call HiInterestingWord(6)<cr>
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
highlight search ctermfg=white ctermbg=3423513
" better retab
fu! Retab()
:retab
:%s/\s\+$//
endfunction
""""""""""""""""""""""""""""""""
"
" BUG WORKAROUNDS
"
""""""""""""""""""""""""""""""""
" realign buffers when iterm goes fullscreen
augroup FixProportionsOnResize
au!
au VimResized * exe "normal! \<c-w>="
augroup END
" vim mode-switch lag fix
if ! has("gui_running")
set ttimeoutlen=10
augroup FastEscape
autocmd!
au InsertEnter * set timeoutlen=0
au InsertLeave * set timeoutlen=1000
augroup END
endif
" macos vs linux clipboard
if has("mac")
set clipboard+=unnamed
else
set clipboard=unnamedplus
endif
" make C-a, C-x work properly
set nrformats=
" make C-j work consistent in C programms
let g:C_Ctrl_j='off'
" potential lag fix
let g:matchparen_insert_timeout=1
" fix bufexplorer bug with hidden
let g:bufExplorerFindActive=0
" alternative approach for lines that are too long
set colorcolumn=
highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment