" execute pathogen#infect() set mouse= set ttymouse= " Allow saving of files as sudo when I forgot to start vim using sudo. cmap w!! w !sudo tee > /dev/null % " Highlight characters over 80 "augroup vimrc_autocmds " autocmd BufEnter * highlight OverLength ctermbg=darkgrey guibg=#111111 " autocmd BufEnter * match OverLength /\%81v.*/ "augroup END " Make Vim able to edit crontab files again. set backupskip=/tmp/*,/private/tmp/* set backup " enable backups set noswapfile " it's 2015, Vim. set undodir=~/.vim/tmp/undo// " undo files set backupdir=~/.vim/tmp/backup// " backups set directory=~/.vim/tmp/swap// " swap files " Make those folders automatically if they don't already exist. if !isdirectory(expand(&undodir)) call mkdir(expand(&undodir), "p") endif if !isdirectory(expand(&backupdir)) call mkdir(expand(&backupdir), "p") endif if !isdirectory(expand(&directory)) call mkdir(expand(&directory), "p") endif " Resize splits when the window is resized au VimResized * :wincmd = set modelines=1 set showmode set history=700 set undofile set undoreload=10000 set matchtime=3 set splitbelow set splitright set autowrite set autoread set shiftround set title set linebreak set colorcolumn=+1 " Enable filetype plugins filetype plugin on filetype indent on "Always show current position set ruler "Clipboard stuff set clipboard=unnamedplus " Height of the command bar set cmdheight=2 " A buffer becomes hidden when it is abandoned set hid " Configure backspace so it acts as it should act set backspace=eol,start,indent set whichwrap+=<,>,h,l " Ignore case when searching set ignorecase " When searching try to be smart about cases set smartcase " Highlight search results set hlsearch " Makes search act like search in modern browsers set incsearch " Don't redraw while executing macros (good performance config) set lazyredraw " For regular expressions turn magic on set magic " Show matching brackets when text indicator is over them set showmatch " No annoying sound on errors set noerrorbells set novisualbell set t_vb= "http://sunaku.github.io/vim-256color-bce.html set t_ut= set tm=500 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Colors and Fonts """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Sets 256 color mode if the terminal supports it set t_Co=256 " Enable syntax highlighting syntax enable set nu set background=dark "let g:solarized_termcolors=256 " colorscheme brogrammer " Set utf8 as standard encoding and en_US as the standard language set encoding=utf8 " Use Unix as the standard file type set ffs=unix,dos,mac """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Text, tab and indent related """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Use spaces instead of tabs set expandtab " Be smart when using tabs ;) set smarttab " 1 tab == 4 spaces set shiftwidth=4 set tabstop=4 " Linebreak on 500 characters set lbr set tw=500 set ai "Auto indent set si "Smart indent set wrap "Wrap lines """""""""""""""""""""""""""""" " => Visual mode related """""""""""""""""""""""""""""" " Visual mode pressing * or # searches for the current selection " Super useful! From an idea by Michael Naumann vnoremap * :call VisualSelection('f') vnoremap # :call VisualSelection('b') """""""""""""""""""""""""""""" " => Status line """""""""""""""""""""""""""""" " Always show the status line "set laststatus=1 " Format the status line "set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Moving around, tabs, windows and buffers """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Resize splits map + - map - + map > < map < > " Close the current buffer map bd :Bclose " Close all the buffers map ba :1,1000 bd! " Useful mappings for managing tabs map tn :tabnew map to :tabonly map tc :tabclose map tm :tabmove " Opens a new tab with the current buffer's path " Super useful when editing files in the same directory map te :tabedit =expand("%:p:h")/ " Switch CWD to the directory of the open buffer map cd :cd %:p:h:pwd " Specify the behavior when switching between buffers try set switchbuf=useopen,usetab,newtab set stal=2 catch endtry " Return to last edit position when opening files (You want this!) autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif " Remember info about open buffers on close set viminfo^=% " Vim split options " Remaps ctrl w + $key to ctrl $key " ctrl j = move right nnoremap " ctrl k = move up nnoremap " ctrl l = move down nnoremap " ctrl h = move left nnoremap """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Helper functions """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! CmdLine(str) exe "menu Foo.Bar :" . a:str emenu Foo.Bar unmenu Foo endfunction function! VisualSelection(direction) range let l:saved_reg = @" execute "normal! vgvy" let l:pattern = escape(@", '\\/.*$^~[]') let l:pattern = substitute(l:pattern, "\n$", "", "") if a:direction == 'b' execute "normal ?" . l:pattern . "^M" elseif a:direction == 'gv' call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.') elseif a:direction == 'replace' call CmdLine("%s" . '/'. l:pattern . '/') elseif a:direction == 'f' execute "normal /" . l:pattern . "^M" endif let @/ = l:pattern let @" = l:saved_reg endfunction " Returns true if paste mode is enabled function! HasPaste() if &paste return 'PASTE MODE ' en return '' endfunction " Trailing whitespace {{{ " Only shown when not in insert mode so I don't go insane. augroup trailing au! au InsertEnter * :set listchars-=trail:⌴ au InsertLeave * :set listchars+=trail:⌴ augroup END " 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 " Reselect last-pasted text nnoremap gp `[v`] """""""""""""""""""" " PATHOGEN PLUGINS " """""""""""""""""""" " START NERDTree if no files are specified autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif " Close NERDTree if it's the only window left open autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif " https://github.com/nathanaelkane/vim-indent-guides/issues/20 let g:indent_guides_exclude_filetypes = ['nerdtree'] " END NERDTree " START Airline let g:airline#extensions#tabline#enabled = 1 set laststatus=2 let g:airline_theme='murmur' let g:airline#extensions#hunks#enabled=0 let g:airline#extensions#branch#enabled=1 " END Airline " START windowswap let g:windowswap_map_keys = 0 "prevent default bindings nnoremap yw :call WindowSwap#MarkWindowSwap() nnoremap pw :call WindowSwap#DoWindowSwap() nnoremap ww :call WindowSwap#EasyWindowSwap() " END windowswap " START ctrlp set runtimepath^=~/.vim/bundle/ctrlp.vim " END ctrlp " START ansible-vim let g:ansible_extra_keywords_highlight = 1 let g:ansible_name_highlight = 'b' let g:ansible_extra_syntaxes = "sh.vim" func! DeleteTrailingWS() exe "normal mz" %s/\s\+$//ge exe "normal `z" endfunc autocmd BufWrite * :call DeleteTrailingWS() " START vim-hclfmt let g:hcl_fmt_autosave = 1 let g:tf_fmt_autosave = 0 let g:nomad_fmt_autosave = 1 " END vim-hclfmt nmap :call ToggleIndentGuidesSpaces() function! ToggleIndentGuidesSpaces() if exists('b:iguides_spaces') call matchdelete(b:iguides_spaces) unlet b:iguides_spaces else let pos = range(1, &l:textwidth, &l:shiftwidth) call map(pos, '"\\%" . v:val . "v"') let pat = '\%(\_^\s*\)\@<=\%(' . join(pos, '\|') . '\)\s' let b:iguides_spaces = matchadd('CursorLine', pat) endif endfunction " START vim-hashicorp-terraform let g:terraform_align = 1 " END vim-hashicorp-terraform