Created
September 28, 2017 05:22
-
-
Save MSiam/6afc1aa8048307b4214a8ce7ca90c787 to your computer and use it in GitHub Desktop.
Our vimrc including plugins that turns vim into a nice IDE
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
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Blog_post: | |
" http://amix.dk/blog/post/19691#The-ultimate-Vim-configuration-on-Github | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Vundle | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim | |
set nocompatible | |
filetype off | |
" set the runtime path to include Vundle and initialize | |
set rtp+=~/.vim/bundle/Vundle.vim | |
call vundle#begin() | |
" let Vundle manage Vundle, required | |
Plugin 'gmarik/Vundle.vim' "Vundle:Plugin manager | |
Plugin 'tmhedberg/SimpylFold' "SimpylFold: folding python code | |
Plugin 'nanotech/jellybeans.vim' "Jellybeans: Nice color scheme | |
Plugin 'bling/vim-airline' "Airline: status bar | |
Plugin 'kien/ctrlp.vim' "Ctrlp: Search files | |
Plugin 'majutsushi/tagbar' "Tagbar: used to get overview of file (fns,classes), enables goto fn | |
Plugin 'tpope/vim-fugitive' "Fugitive: git wrapper | |
Plugin 'SirVer/ultisnips' "Ultisnips: for snippets | |
Plugin 'honza/vim-snippets' | |
Plugin 'heavenshell/vim-pydocstring' "to generate pydocstring | |
Plugin 'w0ng/vim-hybrid' | |
Plugin 'Valloric/YouCompleteMe' "Python autocomplete | |
Plugin 'scrooloose/nerdtree' "Nerdtree: Tree file explorer | |
Plugin 'jistr/vim-nerdtree-tabs' | |
Plugin 'qpkorr/vim-bufkill' "Use :BD to kill buffer without affecting nerdtree | |
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'} | |
" All #of your Plugins must be added before the following line | |
call vundle#end() " required | |
filetype plugin indent on " required | |
filetype plugin on | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => General | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Sets how many lines of history VIM has to remember | |
set history=1000 | |
" Enable filetype plugins | |
filetype plugin 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 = "," | |
"let Tlist_Auto_Open = 1 | |
inoremap jk <Esc> | |
" Fast saving | |
nmap <leader>w :w!<cr> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => VIM user interface | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Set 2 lines to the cursor - when moving vertically using j/k | |
set so=2 | |
" Turn on the WiLd menu | |
set wildmenu | |
" Ignore compiled files | |
set wildignore=*.o,*~,*.pyc | |
"Always show current position | |
set ruler | |
"Always show numbers | |
set number | |
"Show cursorline | |
set cursorline | |
" Height of the command bar | |
set cmdheight=1 | |
" 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 | |
" 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 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => 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 :1,1000 bd!<cr> | |
" Use the arrows to something usefull | |
map <silent><right> :bn<cr> | |
map <silent><left> :bp<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 | |
" 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 | |
set foldmethod=indent | |
set foldlevel=99 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Editing mappings | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Remap VIM 0 to first non-blank character | |
map 0 ^ | |
" 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() | |
autocmd BufWrite .vimrc :call DeleteTrailingWS() | |
autocmd BufWrite .zshrc :call DeleteTrailingWS() | |
" Toggle line numbers and fold column for easy copying: | |
nnoremap <F2> :set nonumber!<CR>:set foldcolumn=0<CR>:SyntasticToggleMode<CR> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => vimgrep searching and cope displaying | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" When you press gv you vimgrep after the selected text | |
vnoremap <silent> gv :call VisualSelection('gv')<CR> | |
" Open vimgrep and put the cursor in the right position | |
map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left> | |
" Vimgreps in the current file | |
map <leader><space> :vimgrep // <C-R>%<C-A><right><right><right><right><right><right><right><right><right> | |
" When you press <leader>r you can search and replace the selected text | |
vnoremap <silent> <leader>r :call VisualSelection('replace')<CR> | |
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= | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => 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 | |
" 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 | |
"""""""""""""""""""""""""""""" | |
" => ctrlp | |
"""""""""""""""""""""""""""""" | |
"set wildignore+=*.o,*.obj,.git,*.pyc,*.hi,*.class,*.jar | |
"let g:ctrlp_map = '<leader>j' | |
"let g:ctrlp_max_height = 20 | |
"let g:ctrlp_working_path_mode = 0 | |
"let g:ctrlp_open_new_file = 0 | |
"let g:ctrlp_open_multi = 2 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => TagBar | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
nnoremap <silent> <F5> :TagbarToggle<CR> | |
let g:tagbar_autofocus=1 | |
let g:tagbar_compact = 1 | |
let g:tagbar_usearrows = 1 | |
let g:tagbar_autoshowtag = 1 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => EasyMotion | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
let g:EasyMotion_leader_key= ';' | |
hi link EasyMotionTarget ErrorMsg | |
hi link EasyMotionShade Comment | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Colors and Fonts | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Enable syntax highlighting | |
syntax enable | |
" Set 256 colors for gnome terminal | |
set t_Co=256 | |
set background=dark | |
"colorscheme jellybeans | |
"colorscheme hybrid | |
colorscheme desert | |
" 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 | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Airline | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
let g:airline#extensions#tabline#enabled = 1 | |
let g:airline_right_sep='' | |
let g:airline_section_y="" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Ultisnips | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe. | |
let g:UltiSnipsExpandTrigger="<c-j>" | |
let g:UltiSnipsJumpForwardTrigger="<c-b>" | |
let g:UltiSnipsJumpBackwardTrigger="<c-z>" | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => Newcomplete | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
"let g:neocomplete#enable_at_startup = 1 | |
"let g:neocomplete#enable_smart_case = 1 | |
" | |
"" Plugin key-mappings. | |
"inoremap <expr><C-g> neocomplete#undo_completion() | |
"inoremap <expr><C-l> neocomplete#complete_common_string() | |
" | |
"" Recommended key-mappings. | |
"" <CR>: close popup and save indent. | |
"inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR> | |
"function! s:my_cr_function() | |
" "return neocomplete#close_popup() . "\<CR>" | |
" " For no inserting <CR> key. | |
" return pumvisible() ? neocomplete#close_popup() : "\<CR>" | |
"endfunction | |
"" <TAB>: completion. | |
"inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>" | |
"" <C-h>, <BS>: close popup and delete backword char. | |
"inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>" | |
"inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>" | |
"inoremap <expr><C-y> neocomplete#close_popup() | |
"inoremap <expr><C-e> neocomplete#cancel_popup() | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => YouCompleteMe | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
let g:ycm_confirm_extra_conf = 0 | |
let g:ycm_autoclose_preview_window_after_completion = 1 | |
let g:ycm_path_to_python_interpreter="python" | |
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR> | |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" => 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 scripbble | |
map <leader>q :e ~/buffer<cr> | |
" Toggle paste mode on and off | |
map <leader>pp :setlocal paste!<cr> | |
" Force write when you forget to sudo | |
cmap w!! w !sudo tee % >/dev/null | |
" From github.com/garybernhardt/dotfiles/blob/master/.vimrc | |
" Expand %% to current buffer's directory | |
cnoremap %% <C-R>=expand('%:h').'/'<cr> | |
function! RenameFile() | |
let old_name = expand('%') | |
let new_name = input('New file name: ', expand('%'), 'file') | |
if new_name != '' && new_name != old_name | |
exec ':saveas ' . new_name | |
exec ':silent !rm ' . old_name | |
redraw! | |
endif | |
endfunction | |
map <leader>n :call RenameFile()<cr> | |
" Fast editing of the .vimrc | |
map <leader>e :e! ~/.vimrc<cr> | |
" When vimrc is edited, reload it | |
autocmd! bufwritepost .vimrc source ~/.vimrc | |
" Hide tabline | |
set showtabline=1 | |
let c='a' | |
while c <= 'z' | |
exec "set <A-".c.">=\e".c | |
exec "imap \e".c." <A-".c.">" | |
let c = nr2char(1+char2nr(c)) | |
endw | |
set timeout ttimeoutlen=50 | |
autocmd vimenter * NERDTree | |
" Move a line of text using ALT+[jk] or Comamnd+[jk] on mac | |
nnoremap <A-j> :m .+1<CR>== | |
nnoremap <A-k> :m .-2<CR>== | |
inoremap <A-j> <Esc>:m .+1<CR>==gi | |
inoremap <A-k> <Esc>:m .-2<CR>==gi | |
vnoremap <A-j> :m '>+1<CR>gv=gv | |
vnoremap <A-k> :m '<-2<CR>gv=gv | |
" Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe. | |
let g:UltiSnipsExpandTrigger="<tab>" | |
let g:UltiSnipsJumpForwardTrigger="<c-b>" | |
let g:UltiSnipsJumpBackwardTrigger="<c-z>" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment