execute pathogen#infect() " Allow saving of files as sudo when I forgot to start vim using sudo. cmap w!! w !sudo tee > /dev/null % " 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 " Highlight VCS conflict markers match ErrorMsg '^\(<\|=\|>\)\{7\}\([^=].\+\)\?$' " Clean trailing whitespace nnoremap ww mz:%s/\s\+$//:let @/=''`z " Resize splits when the window is resized au VimResized * :wincmd = set modelines=0 set showmode set history=700 set undofile set undoreload=10000 set listchars=tab:▸\ ,eol:¬,extends:❯,precedes:❮ 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 " 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 colorscheme murphy " 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 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 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 " For some reason Vim no longer wants to talk to the OS X pasteboard through "*. " Computers are bullshit. function! g:FuckingCopyTheTextPlease() let old_z = @z normal! gv"zy call system('pbcopy', @z) let @z = old_z endfunction noremap p "*p " noremap p mz:r!pbpaste`z vnoremap y :call g:FuckingCopyTheTextPlease() nnoremap y VV:call g:FuckingCopyTheTextPlease() " 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='behelit' " END Airline function! Clippy() exe getline('.') endfunction command -range Clippy ,call Clippy() vmap :Clippy " 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