"====================================================================== " Neobundle Setup "====================================================================== if has('vim_starting') set nocompatible set runtimepath+=~/.vim/bundle/neobundle.vim/ endif call neobundle#rc(expand('~/.vim/bundle/')) " Let NeoBundle manage NeoBundle NeoBundleFetch 'Shougo/neobundle.vim' "====================================================================== " Plugins and useful stuff/dependencies "====================================================================== NeoBundle "Chiel92/vim-autoformat" NeoBundle 'AndrewRadev/splitjoin.vim' NeoBundle 'Shougo/neocomplete' NeoBundle 'Shougo/neosnippet' NeoBundle 'Shougo/unite.vim' NeoBundle 'Shougo/vimproc', { \ 'build' : { \ 'mac' : 'make -f make_mac.mak', \ 'unix' : 'make -f make_unix.mak' \ }, \ } NeoBundle 'bling/vim-airline' NeoBundle 'chrisbra/NrrwRgn' NeoBundle 'dhruvasagar/vim-vinegar' NeoBundle 'editorconfig/editorconfig-vim' NeoBundle 'edsono/vim-matchit' NeoBundle 'gcmt/wildfire.vim' NeoBundle 'godlygeek/tabular' NeoBundle 'justinmk/vim-sneak' NeoBundle 'marijnh/tern_for_vim', { \ 'build' : { \ 'mac' : 'npm install', \ 'unix' : 'npm install' \ }, \ } NeoBundle 'mattn/emmet-vim' NeoBundle 'moll/vim-node' NeoBundle 'scrooloose/nerdtree' NeoBundle 'scrooloose/syntastic' NeoBundle 't9md/vim-choosewin' NeoBundle 'tomtom/tcomment_vim' NeoBundle 'tpope/vim-fugitive' NeoBundle 'tpope/vim-ragtag' NeoBundle 'tpope/vim-repeat' NeoBundle 'tpope/vim-surround' NeoBundle 'tpope/vim-unimpaired' NeoBundle 'webgefrickel/vim-gtfo' NeoBundle 'webgefrickel/vim-snippets' NeoBundle 'wellle/tmux-complete.vim' "====================================================================== " Additional syntaxes "====================================================================== NeoBundle 'beyondwords/vim-twig' NeoBundle 'elzr/vim-json' NeoBundle 'joshtronic/php.vim' NeoBundle 'mustache/vim-mustache-handlebars' NeoBundle 'othree/html5.vim' NeoBundle 'othree/javascript-libraries-syntax.vim' NeoBundle 'pangloss/vim-javascript' NeoBundle 'tpope/vim-git' NeoBundle 'tpope/vim-haml' NeoBundle 'tpope/vim-markdown' NeoBundle 'webgefrickel/vim-typoscript' "====================================================================== " Color themes "====================================================================== NeoBundle 'altercation/vim-colors-solarized' "====================================================================== " Default sane config "====================================================================== filetype plugin indent on syntax on set autoread " Automatically read a file that has changed on disk set backspace=indent,eol,start " Allow backspacing over everything in insert mode set cursorline " highligh current line set encoding=utf-8 " Yeah. UTF-8 FTW! set grepprg=ag " use ag for grepping set hidden " allows for switching buffers without writing set lazyredraw " Don't redraw while executing macros set list! " nice Whitespace chars set mouse=a " mouse for scrolling set nobackup " no backups set noerrorbells " don't beep set noesckeys " no delay for escaping set noshowmode " dont show active mode -- we use airline for that set noswapfile " no swp-files set nowrap " dont wrap lines around set nowritebackup " no stupid backup files set pastetoggle= " toggle paste-mode for c&p with F2 set relativenumber " relative line numbers are mothereffin awesome -- see how far your commands will go set ruler " show where you are in the document set scrolljump=5 " Lines to scroll when cursor leaves screen set scrolloff=3 " Minimum lines to keep above and below cursor set showcmd " show me what im doing. helps alot set sidescroll=10 " smoother side-scrolling set sidescrolloff=5 " jump by 5 when scrolling sideways set timeout timeoutlen=800 ttimeoutlen=100 " get rid of the delay when pressing O (for example) set ttyfast " faster terminal usage set virtualedit=all " every mode active from v V to StrgV set visualbell " don't flicker "====================================================================== " Searching, completion and folds "====================================================================== set ignorecase set smartcase set gdefault set incsearch set showmatch set hlsearch set wrapscan set wildmode=list:longest,list:full set wildignore+=*/.git/*,*/.hg/*,*/.svn/*.,*/.DS_Store set wildmenu set foldignore= set foldmethod=indent " indent folding set foldnestmax=20 " max 20 levels of folding set nofoldenable " dont fold by default - let me do it set foldlevelstart=1 " deactivate folding on fileload "====================================================================== " Tabs and Whitespace -- can be overridden by editorconfig "====================================================================== set fileformat=unix set tabstop=2 set softtabstop=2 set shiftwidth=2 set shiftround set smarttab set expandtab set autoindent "====================================================================== " gui options for macvim "====================================================================== if has('gui_running') set guifont=Menlo\ for\ Powerline:h12 " a nice font here set linespace=1 " menlo is nice, but very dense... set guioptions-=T " no toolbar set guioptions-=L " no left scrollbar set guioptions-=r " no right scrollbar endif "====================================================================== " mac terminal-vim play nicely with tmux "====================================================================== if &term =~ '^screen' " tmux will send xterm-style keys when its xterm-keys option is on execute "set =\e[1;*A" execute "set =\e[1;*B" execute "set =\e[1;*C" execute "set =\e[1;*D" " map [B endif set clipboard=unnamed " osx + tmux fix "====================================================================== " colorscheme and optical stuff "====================================================================== " custom list/invisible chars set listchars=extends:»,precedes:«,tab:▸\ ,trail:· set fillchars= set laststatus=2 " statusbar is 2 high set ch=2 " command window is 2 high set cpo+=$ " Add a $ to the end of a selection set cpo+=J " 2 spaces after a sentence for easier text manupulation colorscheme solarized set background=dark " and a dark background of course set t_Co=256 " 256 color terminal FTW let g:solarized_termtrans = 1 let g:solarized_contrast = 'high' " minor optical fix vor syntastic highlight SignColumn ctermbg=8 "====================================================================== " Custom functions "====================================================================== " for stripping trailing whitespace function! StripTrailingWhitespaces() let l = line(".") let c = col(".") %s/\s\+$//e call cursor(l, c) endfunction "====================================================================== " autocommands, filetypes, spelling, keywords for specific filetypes "====================================================================== " " Remember last location/cursor in file au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g'\"" | endif " spell correction on text-files au BufRead,BufNewFile *.{md|rst} setlocal spell " add the dash to keywords -- makes better css/js/html search " do this for specific files only (not in php/rb e.g.) " TODO check if this is sane at all au BufNewFile,BufRead *.{json,js,css,scss,html} set iskeyword+=- au BufNewFile,BufRead *.{json,js,css,scss,html} set iskeyword-=_ " scss.css snippets and stuff au BufNewFile,BufRead *.{scss} set ft=scss.css " Syntaxes for other files au BufNewFile,BufRead Phakefile set ft=php au BufNewFile,BufRead *.twig set ft=html.twig " assume typoscript for txt -- i use md only :-) au BufNewFile,BufRead *.{txt,ts} set ft=typoscript " load emmet for html-files au FileType html,php,twig,mustache EmmetInstall " omnicompletion for some filetypes au FileType css,scss setlocal omnifunc=csscomplete#CompleteCSS au FileType html,php,markdown setlocal omnifunc=htmlcomplete#CompleteTags au FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS au FileType xml setlocal omnifunc=xmlcomplete#CompleteTags " special lib syntax sugar for javascriptj let g:used_javascript_libs = 'jquery,underscore,backbone,angularjs' "====================================================================== " Custom key mappings and shortcuts "====================================================================== " remap semi-colon to be colon nnoremap ; : vnoremap ; : " Swap v and CTRL-V, because Block mode is more useful nnoremap v nnoremap v vnoremap v vnoremap v " jk nice behaviour (screen lines vs. shown lines) nnoremap j gj nnoremap k gk " behave - yank just like D and C nnoremap Y y$ " sane default search nnoremap / /\v vnoremap / /\v " Search mappings: These will make it so that going to the next one in a " search will center on the line it's found in. nnoremap N Nzz nnoremap n nzz " dont use the arrow keys in insert mode inoremap inoremap inoremap inoremap " but use them for usefull stuff in normal mode-- switching buffers nnoremap :bfirst nnoremap :blast nnoremap :bp nnoremap :bn " Bubble/indent lines using unimpaired nmap [e nmap ]e nmap << nmap >> vmap [egv vmap ]egv vmap >gv " Switch between windows nnoremap nnoremap W " no help while mishitting ESC - awesome inoremap nnoremap vnoremap " deactivate stupid ex-mode and man-page stuff nnoremap Q nnoremap K " reload files when set autoread is active with F5 nnoremap :checktime " Autoformat plugin nnoremap :Autoformat " For when you forget to sudo.. Really Write the file. cmap w!! w !sudo tee % >/dev/null "====================================================================== " take me to your leader! "====================================================================== let mapleader = "," let g:mapleader = "," let maplocalleader = "," let g:maplocalleader = "," " open new vertical split and change to split nnoremap \ vl nnoremap - sj " Adjust viewports to the same size nnoremap = = " open a new split and edit the vimrc // easy sourcing vimrc nnoremap ve vl :e ~/.vimrc nnoremap vs :source ~/.vimrc " Opens an edit command with the path of the currently edited file filled in nnoremap o :e =expand("%:p:h") . "/" " start a new document-wide seach-replace nnoremap r :%s/ " reset search nmap :noh " short command to strip trainling whitepsace nmap s :call StripTrailingWhitespaces() " Find merge conflict markers nmap g /\v^[<\|=>]{7}( .*\|$) " Map * to display all lines with keyword under cursor and ask which one to jump to nmap * [I:let nr = input("Enter line number: ")exe "normal " . nr ."[\t" " Yank text to the OS X clipboard noremap y "*y noremap Y "*Y " paste keeping indentation nnoremap p p`[v`]= " when over a class in html hit leader-f to find that class in css/scss/js nmap f :execute "vimgrep /" . expand("") . "/j **" cnext "====================================================================== " Plugin configuration and keymappings "====================================================================== " vim sneak let g:sneak#use_ic_scs = 1 let g:sneak#map_netrw = 0 let g:sneak#streak = 1 nmap SneakNext nmap \| SneakPrevious xmap VSneakNext xmap \| VSneakPrevious " fugitive nnoremap gs :Gstatus20+ nnoremap gd :Gdiff20+ nnoremap gc :Gcommit20+ nnoremap gb :Gblame20+ nnoremap gl :Glog20+ nnoremap gp :Git push20+ nnoremap gw :Gwrite20+ " Tabularize nmap t= :Tabularize /= vmap t= :Tabularize /= nmap t{ :Tabularize /{ vmap t{ :Tabularize /{ nmap t: :Tabularize /: vmap t: :Tabularize /: nmap t, :Tabularize /, vmap t, :Tabularize /, nmap t :Tabularize / vmap t :Tabularize / " Splitjoin let g:splitjoin_split_mapping = '' let g:splitjoin_join_mapping = '' nmap J :SplitjoinJoin nmap S :SplitjoinSplit " choosewin nmap w (choosewin) " TComment nnoremap / :TComment vnoremap / :TComment inoremap / :TComment " neosnippet let g:neosnippet#disable_runtime_snippets = { "_": 1 } let g:neosnippet#scope_aliases = {} let g:neosnippet#scope_aliases['css'] = 'css,scss' let g:neosnippet#scope_aliases['php'] = 'php,html' let g:neosnippet#snippets_directory='~/.vim/bundle/vim-snippets/snippets' imap (neosnippet_expand_or_jump) imap neosnippet#expandable_or_jumpable() ? \ "\(neosnippet_expand_or_jump)" \: pumvisible() ? "\" : "\" " For snippet_complete marker. if has('conceal') set conceallevel=2 concealcursor=i endif " Syntastic " no checking for xhtml/html -- because of fluidtemplate for TYPO3 " and no checking for scss.css because of CSS3 and SASS-Variable let g:syntastic_auto_jump = 0 " let g:syntastic_scss_checkers = ['scss_lint'] let g:syntastic_mode_map = { \ 'mode': 'active', \ 'active_filetypes': ['php', 'javascript'], \ 'passive_filetypes': ['xhtml', 'html', 'scss', 'css'] \ } " airline config let g:airline_theme = 'solarized' let g:airline_left_sep = '▶' let g:airline_right_sep = '◀' " EMMET deactivate emmet by default let g:user_emmet_install_global = 0 imap emmet#expandAbbrIntelligent("\") " wildfire let g:wildfire_objects = ['i"', "i'", "i)", "i]", "i}", "iW", "it", "ip"] let g:wildfire_fuel_map = "" let g:wildfire_water_map = "" " NERDtree let NERDTreeAutoDeleteBuffer=1 let NERDTreeMinimalUI=1 let NERDTreeWinSize=50 let NERDTreeShowHidden=1 nnoremap n :NERDTreeToggle " choosewin let g:choosewin_overlay_enable = 1 let g:choosewin_overlay_clear_multibyte = 1 let g:choosewin_label = 'ASDFGHJKL;QWERTYUIOP' " NEOCOMPLETE let g:acp_enableAtStartup = 0 let g:neocomplete#enable_at_startup = 1 let g:neocomplete#enable_smart_case = 1 let g:neocomplete#auto_completion_start_length = 4 let g:neocomplete#lock_buffer_name_pattern = '\*ku\*' let g:neocomplete#enable_fuzzy_completion = 1 inoremap neocomplete#undo_completion() inoremap neocomplete#complete_common_string() inoremap =my_cr_function() inoremap neocomplete#smart_close_popup()."\" inoremap neocomplete#smart_close_popup()."\" inoremap neocomplete#close_popup() inoremap neocomplete#cancel_popup() function! s:my_cr_function() return neocomplete#close_popup() . "\" endfunction 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*::' "====================================================================== " The Unite Plugin gets an extra config section "====================================================================== let g:unite_source_history_yank_enable=1 let g:unite_prompt='❯ ' let g:unite_source_grep_command='ag' let g:unite_source_grep_default_opts='--nocolor --nogroup -S' let g:unite_source_grep_recursive_opt='' let g:unite_split_rule = "botright" call unite#filters#matcher_default#use(['matcher_fuzzy']) call unite#filters#sorter_default#use(['sorter_rank']) call unite#set_profile('files', 'smartcase', 1) call unite#custom#source('line,outline', 'matchers', 'matcher_fuzzy') call unite#custom_source('file_rec, file_rec/async, file_mru, file, buffer, grep', \ 'ignore_pattern', join([ \ '\.git', \ '.sass-cache', \ '_srcs', \ 'node_modules', \ 'tmp', \ '\.\(png\|gif\|jpg\|pdf\|ico\|mp4\|webm\|svg\|mp3\|woff\|ttf\|eot\|min\.js\|min\.map\|css\)$', \ ], '\|')) nmap [unite] nnoremap [unite] nnoremap [unite], :Unite -start-insert -toggle -auto-resize -buffer-name=files file_rec/async nnoremap [unite]b :Unite -short-source-names -quick-match buffer nnoremap [unite]n :Unite -toggle -auto-resize -buffer-name=files file nnoremap [unite]. :Unite -start-insert -auto-resize -buffer-name=buffers buffer nnoremap [unite]l :Unite -auto-resize -buffer-name=line line nnoremap [unite]y :Unite -buffer-name=yanks history/yank nnoremap [unite]f :UniteWithCursorWord -start-insert -toggle -auto-resize -buffer-name=files file_rec/async nnoremap [unite]a :Unite -buffer-name=search grep:. nnoremap [unite]A :UniteWithCursorWord -buffer-name=search grep:. autocmd FileType unite call s:unite_settings() function! s:unite_settings() nmap (unite_exit) imap (unite_select_next_line) imap (unite_select_previous_line) nmap (unite_redraw) imap (unite_redraw) nmap (unite_redraw) imap (unite_redraw) inoremap unite#do_action('split') nnoremap unite#do_action('split') inoremap unite#do_action('vsplit') nnoremap unite#do_action('vsplit') endfunction