Last active
January 27, 2016 20:50
-
-
Save pvijeh/9705f798ccb00320eaab to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
set nocompatible " be iMproved, required | |
filetype off " required | |
" set the runtime path to include Vundle and initialize | |
set rtp+=~/.vim/bundle/Vundle.vim | |
call vundle#begin() | |
" alternatively, pass a path where Vundle should install plugins | |
"call vundle#begin('~/some/path/here') | |
" let Vundle manage Vundle, required | |
Plugin 'VundleVim/Vundle.vim' | |
" The following are examples of different formats supported. | |
" Keep Plugin commands between vundle#begin/end. | |
" plugin on GitHub repo | |
Plugin 'tpope/vim-fugitive' | |
" plugin from http://vim-scripts.org/vim/scripts.html | |
Plugin 'L9' | |
" Git plugin not hosted on GitHub | |
Plugin 'git://git.wincent.com/command-t.git' | |
" The sparkup vim script is in a subdirectory of this repo called vim. | |
" Pass the path to set the runtimepath properly. | |
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} | |
"Javascript Syntax highlighting | |
Plugin 'jelera/vim-javascript-syntax' | |
"more Javascript heighlighting and formatting | |
Plugin 'pangloss/vim-javascript' | |
Plugin 'nathanaelkane/vim-indent-guides' | |
" install solarized theme | |
Bundle 'altercation/vim-colors-solarized' | |
" install buff explorer | |
Bundle 'jlanzarotta/bufexplorer' | |
" automatically add closing brackets | |
Plugin 'Raimondi/delimitMate' | |
" highlight trailing white space | |
Plugin 'bronson/vim-trailing-whitespace' | |
" highlight html / xml tags | |
Plugin 'Valloric/MatchTagAlways' | |
"syntastic for live linting | |
Plugin 'scrooloose/syntastic' | |
"commenting plugin | |
Plugin 'tomtom/tcomment_vim' | |
"Auto Complete | |
Plugin 'Valloric/YouCompleteMe' | |
"Assists autocomplete - parses javascript | |
Plugin 'marijnh/tern_for_vim' | |
"open files by rough file name | |
Plugin 'ctrlpvim/ctrlp.vim' | |
"json syntax highlighting | |
Plugin 'helino/vim-json' | |
"easy alignment | |
Plugin 'junegunn/vim-easy-align' | |
"git info in gutter | |
Plugin 'mhinz/vim-signify' | |
"vim ag search plugin | |
Plugin 'rking/ag.vim' | |
"surround plugin that wraps stuff in things | |
Plugin 'surround.vim' | |
"Sensisble plugin | |
Plugin 'tpope/vim-sensible' | |
"install powerline | |
Plugin 'powerline/powerline', {'rtp': 'powerline/bindings/vim/'} | |
"status bar plugin | |
Plugin 'bling/vim-airline' | |
"nerdtree | |
Plugin 'scrooloose/nerdtree' | |
"vim-node | |
Plugin 'moll/vim-node' | |
"javascript libraries syntax | |
Plugin 'othree/javascript-libraries-syntax.vim' | |
"JSX syntax highlighting | |
Plugin 'mxw/vim-jsx' | |
"vim css | |
Plugin 'julesWang/css.vim' | |
"scss syntax | |
Plugin 'cakebaker/scss-syntax.vim' | |
"Emmet plugin for html / css stuff | |
Plugin 'mattn/emmet-vim' | |
" These are the tweaks I apply to YCM's config, you don't need them but they might help. | |
" " YCM gives you popups and splits by default that some people might not like, so these should tidy it up a bit for you. | |
let g:ycm_add_preview_to_completeopt=0 | |
let g:ycm_confirm_extra_conf=0 | |
set completeopt-=preview | |
"use tab for emmet auto complete | |
imap <expr> <tab> emmet#expandAbbrIntelligent("\<tab>") | |
"break indent stuff http://blog.drewinglis.com/2014/02/20/vim-better-line-wrapping-with-breakindent.html | |
set breakindent | |
set showbreak=\ \ " comment so the space works" | |
"jk exists insert mode | |
imap jk <Esc> | |
"set working directory to directory of current file | |
set autochdir | |
"set relative line numbers | |
set relativenumber | |
augroup myvimrc | |
au! | |
au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif | |
augroup END | |
"disable middle click paste | |
nnoremap <MiddleMouse> <Nop> | |
nnoremap <2-MiddleMouse> <Nop> | |
nnoremap <3-MiddleMouse> <Nop> | |
nnoremap <4-MiddleMouse> <Nop> | |
inoremap <MiddleMouse> <Nop> | |
inoremap <2-MiddleMouse> <Nop> | |
inoremap <3-MiddleMouse> <Nop> | |
inoremap <4-MiddleMouse> <Nop> | |
"add buffer list in airline | |
let g:airline#extensions#tabline#enabled = 1 | |
"auto strip white space | |
function! <SID>StripTrailingWhitespaces() | |
" Preparation: save last search, and cursor position. | |
let _s=@/ | |
let l = line(".") | |
let c = col(".") | |
" Do the business: | |
%s/\s\+$//e | |
" Clean up: restore previous search history, and cursor position | |
let @/=_s | |
call cursor(l, c) | |
endfunction | |
"call auto strip white space for white listed files: | |
autocmd BufWritePre *.py,*.js,*.php,*.css,*.scss :call <SID>StripTrailingWhitespaces() | |
" Show just the filename | |
let g:airline#extensions#tabline#fnamemod = ':t' | |
"tell syntastic to use eslint | |
let g:syntastic_javascript_checkers = ['eslint'] | |
" allow JSX syntax in javascript files: | |
let g:jsx_ext_required = 0 " Allow JSX in normal JS files" | |
" CTRL-X and SHIFT-Del are Cut | |
vnoremap <C-X> "+x | |
vnoremap <S-Del> "+x | |
" CTRL-C and CTRL-Insert are Copy | |
vnoremap <C-C> "+y | |
vnoremap <C-Insert> "+y | |
" CTRL-V and SHIFT-Insert are Paste | |
map <C-V> "+gP | |
map <S-Insert> "+gP | |
cmap <C-V> <C-R>+ | |
cmap <S-Insert> <C-R>+ | |
"disable arrow keys in normal mode | |
" | |
noremap <Up> <Nop> | |
noremap <Down> <Nop> | |
noremap <Left> <Nop> | |
noremap <Right> <Nop> | |
"set clipboard to main system clipboard | |
set clipboard=unnamed | |
"change cursor in insert mode | |
if empty($TMUX) | |
let &t_SI = "\<Esc>]50;CursorShape=1\x7" | |
let &t_EI = "\<Esc>]50;CursorShape=0\x7" | |
else | |
let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\" | |
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\" | |
endif | |
"maintain selection when shifting lines sideways | |
xnoremap < <gv | |
xnoremap > >gv | |
" Pasting blockwise and linewise selections is not possible in Insert and | |
" Visual mode without the +virtualedit feature. They are pasted as if they | |
" were characterwise instead. | |
" Uses the paste.vim autoload script. | |
exe 'inoremap <script> <C-V>' paste#paste_cmd['i'] | |
exe 'vnoremap <script> <C-V>' paste#paste_cmd['v'] | |
imap <S-Insert> <C-V> | |
vmap <S-Insert> <C-V> | |
" Use CTRL-Q to do what CTRL-V used to do | |
noremap <C-Q> <C-V> | |
" This does what it says on the tin. It will check your file on open too, not just on save. | |
" " You might not want this, so just leave it out if you don't. | |
let g:syntastic_check_on_open=1 | |
" All of your Plugins must be added before the following line | |
call vundle#end() " required | |
filetype plugin indent on " required | |
" To ignore plugin indent changes, instead use: | |
"filetype plugin on | |
" | |
" Brief help | |
" :PluginList - lists configured plugins | |
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate | |
" :PluginSearch foo - searches for foo; append `!` to refresh local cache | |
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal | |
" | |
" see :h vundle for more details or wiki for FAQ | |
" Put your non-Plugin stuff after this line | |
"copy and paste system clipboard | |
vmap <C-c> y:call system("pbcopy", getreg("\""))<CR> | |
nmap <C-v> :call setreg("\",system("pbpaste"))<CR>p | |
"default copy cut paste behavior from windows | |
" CTRL-X and SHIFT-Del are Cut | |
vnoremap <C-X> "+x | |
vnoremap <S-Del> "+x | |
" CTRL-C and CTRL-Insert are Copy | |
vnoremap <C-C> "+y | |
vnoremap <C-Insert> "+y | |
" CTRL-V and SHIFT-Insert are Paste | |
map <C-V> "+gP | |
map <S-Insert> "+gP | |
cmap <C-V> <C-R>+ | |
cmap <S-Insert> <C-R>+ | |
" Pasting blockwise and linewise selections is not possible in Insert and | |
" Visual mode without the +virtualedit feature. They are pasted as if they | |
" were characterwise instead. | |
" Uses the paste.vim autoload script. | |
exe 'inoremap <script> <C-V>' paste#paste_cmd['i'] | |
exe 'vnoremap <script> <C-V>' paste#paste_cmd['v'] | |
imap <S-Insert> <C-V> | |
vmap <S-Insert> <C-V> | |
" Use CTRL-Q to do what CTRL-V used to do | |
noremap <C-Q> <C-V> | |
set t_Co=256 | |
syntax on | |
set background=dark | |
colorscheme solarized | |
set nocompatible | |
set bs=2 | |
set ts=4 | |
set sw=4 | |
set number | |
" shows row and column number at bottom right corner | |
set ruler | |
" | |
"commands | |
" | |
"split current line | |
imap <C-c> <CR><Esc>O | |
" Maintainer: | |
" Amir Salihefendic | |
" http://amix.dk - [email protected] | |
" | |
" Version: | |
" 5.0 - 29/05/12 15:43:36 | |
" | |
" Blog_post: | |
" http://amix.dk/blog/post/19691#The-ultimate-Vim-configuration-on-Github | |
" | |
" Awesome_version: | |
" Get this config, nice color schemes and lots of plugins! | |
" | |
" Install the awesome version from: | |
" | |
" https://github.com/amix/vimrc | |
" | |
" Syntax_highlighted: | |
" http://amix.dk/vim/vimrc.html | |
" | |
" Raw_version: | |
" http://amix.dk/vim/vimrc.txt | |
" | |
" Sections: | |
" -> General | |
" -> VIM user interface | |
" -> Colors and Fonts | |
" -> Files and backups | |
" -> Text, tab and indent related | |
" -> Visual mode related | |
" -> Moving around, tabs and buffers | |
" -> Status line | |
" -> Editing mappings | |
" -> vimgrep searching and cope displaying | |
" -> Spell checking | |
" -> Misc | |
" -> Helper functions | |
" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => General | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Sets how many lines of history VIM has to remember | |
set history=500 | |
" Enable filetype plugins | |
filetype plugin on | |
filetype indent on | |
" Set to auto read when a file is changed from the outside | |
set autoread | |
" With a map leader it's possible to do extra key combinations | |
" like <leader>w saves the current file | |
let mapleader = "," | |
let g:mapleader = "," | |
" Fast saving | |
nmap <leader>w :w!<cr> | |
" :W sudo saves the file | |
" (useful for handling the permission-denied error) | |
" command W w !sudo tee % > /dev/null | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => VIM user interface | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Set 7 lines to the cursor - when moving vertically using j/k | |
set so=7 | |
" Avoid garbled characters in Chinese language windows OS | |
let $LANG='en' | |
set langmenu=en | |
source $VIMRUNTIME/delmenu.vim | |
source $VIMRUNTIME/menu.vim | |
" Turn on the WiLd menu | |
set wildmenu | |
" Ignore compiled files | |
set wildignore=*.o,*~,*.pyc | |
if has("win16") || has("win32") | |
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store | |
else | |
set wildignore+=.git\*,.hg\*,.svn\* | |
endif | |
"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 | |
" In many terminal emulators the mouse works just fine, thus enable it. | |
if has('mouse') | |
set mouse=a | |
endif | |
" 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 | |
" How many tenths of a second to blink when matching brackets | |
set mat=2 | |
" No annoying sound on errors | |
set noerrorbells | |
set novisualbell | |
set t_vb= | |
set tm=500 | |
" Add a bit extra margin to the left | |
set foldcolumn=1 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Colors and Fonts | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Enable syntax highlighting | |
syntax enable | |
try | |
colorscheme solarized | |
catch | |
endtry | |
set background=dark | |
" Set extra options when running in GUI mode | |
if has("gui_running") | |
set guioptions-=T | |
set guioptions-=e | |
set t_Co=256 | |
set guitablabel=%M\ %t | |
endif | |
" 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 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Files, backups and undo | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Turn backup off, since most stuff is in SVN, git et.c anyway... | |
set nobackup | |
set nowb | |
set noswapfile | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => 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 <silent> * :call VisualSelection('f', '')<CR> | |
vnoremap <silent> # :call VisualSelection('b', '')<CR> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Moving around, tabs, windows and buffers | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Treat long lines as break lines (useful when moving around in them) | |
map j gj | |
map k gk | |
" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search) | |
map <space> / | |
map <c-space> ? | |
" Disable highlight when <leader><cr> is pressed | |
map <silent> <leader><cr> :noh<cr> | |
" Smart way to move between windows | |
map <C-j> <C-W>j | |
map <C-k> <C-W>k | |
map <C-h> <C-W>h | |
map <C-l> <C-W>l | |
" Close the current buffer | |
map <leader>bd :Bclose<cr> | |
" Close all the buffers | |
map <leader>ba :bufdo bd<cr> | |
" Useful mappings for managing tabs | |
map <leader>tn :tabnew<cr> | |
map <leader>to :tabonly<cr> | |
map <leader>tc :tabclose<cr> | |
map <leader>tm :tabmove | |
map <leader>t<leader> :tabnext | |
" Let 'tl' toggle between this and the last accessed tab | |
let g:lasttab = 1 | |
nmap <Leader>tl :exe "tabn ".g:lasttab<CR> | |
au TabLeave * let g:lasttab = tabpagenr() | |
" Opens a new tab with the current buffer's path | |
" Super useful when editing files in the same directory | |
map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/ | |
" Switch CWD to the directory of the open buffer | |
map <leader>cd :cd %:p:h<cr>:pwd<cr> | |
" 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^=% | |
"""""""""""""""""""""""""""""" | |
" => Status line | |
"""""""""""""""""""""""""""""" | |
" Always show the status line | |
set laststatus=2 | |
" Format the status line | |
set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Editing mappings | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Remap VIM 0 to first non-blank character | |
map 0 ^ | |
" Move a line of text using ALT+[jk] or Comamnd+[jk] on mac | |
nmap <M-j> mz:m+<cr>`z | |
nmap <M-k> mz:m-2<cr>`z | |
vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z | |
vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z | |
if has("mac") || has("macunix") | |
nmap <D-j> <M-j> | |
nmap <D-k> <M-k> | |
vmap <D-j> <M-j> | |
vmap <D-k> <M-k> | |
endif | |
" Delete trailing white space on save, useful for Python and CoffeeScript ;) | |
func! DeleteTrailingWS() | |
exe "normal mz" | |
%s/\s\+$//ge | |
exe "normal `z" | |
endfunc | |
autocmd BufWrite *.py :call DeleteTrailingWS() | |
autocmd BufWrite *.coffee :call DeleteTrailingWS() | |
" tell vim to use this python | |
let g:ycm_path_to_python_interpreter = '/usr/bin/python' | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Ag searching and cope displaying | |
" requires ag.vim - it's much better than vimgrep/grep | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" When you press gv you Ag after the selected text | |
vnoremap <silent> gv :call VisualSelection('gv', '')<CR> | |
" Open Ag and put the cursor in the right position | |
map <leader>g :Ag | |
" When you press <leader>r you can search and replace the selected text | |
vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR> | |
" Do :help cope if you are unsure what cope is. It's super useful! | |
" | |
" When you search with Ag, display your results in cope by doing: | |
" <leader>cc | |
" | |
" To go to the next search result do: | |
" <leader>n | |
" | |
" To go to the previous search results do: | |
" <leader>p | |
" | |
map <leader>cc :botright cope<cr> | |
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg | |
map <leader>n :cn<cr> | |
map <leader>p :cp<cr> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Spell checking | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Pressing ,ss will toggle and untoggle spell checking | |
map <leader>ss :setlocal spell!<cr> | |
" Shortcuts using <leader> | |
map <leader>sn ]s | |
map <leader>sp [s | |
map <leader>sa zg | |
map <leader>s? z= | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Misc | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Remove the Windows ^M - when the encodings gets messed up | |
noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm | |
" Quickly open a buffer for scribble | |
map <leader>q :e ~/buffer<cr> | |
" Quickly open a markdown buffer for scribble | |
map <leader>x :e ~/buffer.md<cr> | |
" Toggle paste mode on and off | |
map <leader>pp :setlocal paste!<cr> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Helper functions | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
function! CmdLine(str) | |
exe "menu Foo.Bar :" . a:str | |
emenu Foo.Bar | |
unmenu Foo | |
endfunction | |
function! VisualSelection(direction, extra_filter) 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("Ag \"" . 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 ' | |
endif | |
return '' | |
endfunction | |
" Don't close window, when deleting a buffer | |
command! Bclose call <SID>BufcloseCloseIt() | |
function! <SID>BufcloseCloseIt() | |
let l:currentBufNum = bufnr("%") | |
let l:alternateBufNum = bufnr("#") | |
if buflisted(l:alternateBufNum) | |
buffer # | |
else | |
bnext | |
endif | |
if bufnr("%") == l:currentBufNum | |
new | |
endif | |
if buflisted(l:currentBufNum) | |
execute("bdelete! ".l:currentBufNum) | |
endif | |
endfunction | |
" Use the same symbols as TextMate for tabstops and EOLs | |
set listchars=tab:▸\ ,eol:¬ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment