" Source vimrc on vim startup " autocmd! VimEnter * source ~/.vimrc " Load rename plugin " so ~/.vim/Rename.vim " let g:EclimCompletionMethod = 'omnifunc' " Java Autocomplete " let g:acp_behaviorJavaEclimLength=3 " function MeetsForJavaEclim(context) " return g:acp_behaviorJavaEclimLength >= 0 && " \ a:context =~ '\k\.\k\{' . g:acp_behaviorJavaEclimLength . ',}$' " endfunction " let g:acp_behavior = { " \ 'java': [{ " \ 'command': "\\", " \ 'completefunc' : 'eclim#java#complete#CodeComplete', " \ 'meets' : 'MeetsForJavaEclim', " \ }] " \ } " Rezise splits "nnoremap :vertical resize -20 " Autoindent html " autocmd BufWritePre *.html :normal gg=G " Remove spaces at end of lines autocmd BufWritePre * %s/\s\+$//e " Fold all with leader + f nnoremap f :call ToggleFold() " Set relative line number and number to see current line number " set rnu set number " Show commands as being written set showcmd " Set syntastic settings set statusline+=%#warningmsg# if exists("SyntasticStatuslineFlag") set statusline+=%{SyntasticStatuslineFlag()} endif set statusline+=%* " Disables syntastic popup window with messages " Set both to 1 to turn it on let g:syntastic_always_populate_loc_list = 0 let g:syntastic_auto_loc_list = 0 let g:syntastic_check_on_open = 0 let g:syntastic_python_checkers = ['flake8'] nnoremap :SyntasticCheck mypy " Set xptemplate trigger key to tab let g:xptemplate_key = '' " Autocomplete with Tab " inoremap "inoremap " Python main method snippet "let g:xptemplate_brace_complete = '([{<' let g:xptemplate_minimal_prefix = 1 " let g:xptemplate_vars="$author=viktor.barzin" " let g:xptemplate_vars="$email=viktor.barzin@samitor.com" " Rebind key " I like to have it here becuase it is easier to reach than the default and " it is next to ``m`` and ``n`` which I use for navigating between tabs. let mapleader = "," " Swap lines nnoremap k :-1,-1m+0k nnoremap j :+0,+0m+1 vnoremap k :m '<-2gv=gv vnoremap j :m '>+1gv=gv " Enable folding with spacebar nnoremap za " Make surrounding with various characters easier nmap ' ysiW' nmap " ysiW" nmap 0 ysiW) " Go to normal mode by tapping jk or kj inoremap kj inoremap jk " Easier buffer closing nnoremap q :bd " Swap to previous buffer nnoremap :b# " Map backspace to delete nnoremap h vnoremap d " Save with s noremap s :update " Sudo save with S noremap S :w !sudo tee % > /dev/null " Writes to all buffers when switching to another buffer set autowrite " Enable virtualenv let g:airline#extensions#virtualenv#enabled = 1 " Enable tabs plugin let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#left_sep = ' ' let g:airline#extensions#tabline#left_alt_sep = '|' " let g:airline_left_sep='>' " let g:airline_right_sep='<' " let g:airline_detect_modified=1 let g:airline_powerline_fonts=1 " let g:airline_section_b = '%{strftime("%c")}' " let g:airline_section_y = 'BN: %{bufnr("%")} FT: %y' " Enable wildmenu which is an enhanced command completion " set wildmenu " Better copy & paste " When you want to paste large blocks of code into vim, press F2 before you " paste. At the bottom you should see ``-- INSERT (paste) --``. set pastetoggle= set clipboard=unnamed " Mouse and backspace set mouse=a " on OSX press ALT and click set bs=2 " make backspace behave like normal again " Remember the cursor last position if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif " Set comment string for commentary.vim for python set commentstring=#%s " I no longer use that because emmet.vim does all I need ""Auto complete HTLM tags "function! s:CompleteTags() " inoremap > >:startinsert!? " inoremap > > " inoremap > >:startinsert!?$ "endfunction "autocmd BufRead,BufNewFile *.html,*.js,*.xml call s:CompleteTags() " Sources $MYVIMRC on changes " augroup reload_vimrc " { " autocmd! " autocmd BufWritePost $MYVIMRC source $MYVIMRC " augroup END " } " Set VIMHOME if has('win32') || has ('win64') let $VIMHOME = $VIM."/vimfiles" else let $VIMHOME = $HOME."/.vim" endif " Bind nohl " Removes highlight of your last search " ```` stands for ``CTRL`` and therefore ```` stands for ``CTRL+n`` noremap :nohl vnoremap :nohl "inoremap :nohl noremap :syntax sync fromstart vnoremap :syntax sync fromstart " Tab switching noremap :b# vnoremap :b# "inoremap :b# " Quicksave command " noremap :update " vnoremap :update " inoremap :update " Execute current file with python noremap e :!python % " bind Ctrl+ keys to move around the windows, instead of using " Ctrl+w + " Every unnecessary keystroke that can be saved is good for your health :) map j map k map l map h " easier moving between tabs map m ;bn map n ;bp " Create empty buffer and open it map t :enew " map sort function to a key vnoremap s :sort " easier moving of code blocks " Try to go into visual mode (v), thenselect several lines of code here and " then press ``>`` several times. vnoremap < >gv " better indentation " Show whitespace " MUST be inserted BEFORE the colorscheme command autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red au InsertLeave * match ExtraWhitespace /\s\+$/ " Color scheme " mkdir -p ~/.vim/colors && cd ~/.vim/colors " wget -O wombat256mod.vim " http://www.vim.org/scripts/download_script.php?src_id=13400 set t_Co=256 color wombat256mod " color ronakg " color mayansmoke " color github " Spelling " set spell " set complete+=kpspell " Enable syntax highlighting " You need to reload this file for the change to apply filetype off filetype plugin indent on syntax on " Ignore flake8 E501 for lines longer than 80 characters " E128 - visual continuation " W391 - blank line at end of file " let g:syntastic_python_flake8_args='--ignore=W391, E501, E701, E702' " let g:syntastic_python_flake8_show_quickfix=1 " let g:pymode_lint_ignore="E501,W601,W391,W0401,E702,E701" let g:pymode_lint_ignore=["E501","W601","W391","W0401","E702","E701"] let g:pymode_lint_settingscwindow = 1 let g:pymode_rope = 1 " let g:pymode_rope_autoimport = 0 let g:pymode_rope_regenerate_on_write = 0 let g:pymode_python="python3" let g:pymode_lint_checkers = ['pep8'] let g:pymode_breakpoint_cmd = 'import ipdb; ipdb.set_trace() # XXX BREAKPOINT' let g:pymode_rope_completion = 1 " Run Lint fixer on save nnoremap p :PymodeLintAuto " nnoremap zz :folddoclosed if foldlevel('.') < foldlevel(line('.')+1) \| exe 'norm! zo' \| endif " Make quickfix screen smaller let g:syntastic_loc_list_height=1 " In visual mode searches for the selected word vnoremap // y/" " Showing line numbers and length set tw=79 " width of document (used by gd) set nowrap " don't automatically wrap on load set fo-=t " don't automatically wrap text when typing set colorcolumn=120 highlight ColorColumn ctermbg=233 " Useful settings set history=700 set undolevels=700 " Real programmers don't use TABs but spaces set tabstop=4 set softtabstop=4 set shiftwidth=4 set shiftround set expandtab " Make search case insensitive set hlsearch set incsearch set ignorecase set smartcase " Disable stupid backup and swap files - they trigger too many events " for file system watchers "set nobackup "set nowritebackup "set noswapfile " Backup files are great so lets keep them in 1 place " Make sure you have ~/vimtmp/ folder. In the future will " move /vimtmp/ in $VIMHOME set backupdir=~/.vim/tmp//,. set directory=~/.vim/tmp//,. set dir=~/.vim/tmp//,. set undodir=~/.vim/tmp/undo// " Setup Pathogen to manage your plugins " mkdir -p ~/.vim/autoload ~/.vim/bundle " curl -so ~/.vim/autoload/pathogen.vim " https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim " Now you can install any plugin into a .vim/bundle/plugin-name/ folder " Pathogen does not work in combatability mode so disable set nocp " let g:pathogen_disabled = ["syntastic"] call pathogen#infect() " "============================================================================ " Python IDE Setup " "============================================================================ " Settings for vim-powerline " cd ~/.vim/bundle " git clone git://github.com/Lokaltog/vim-powerline.git set laststatus=2 " Settings for ctrlp " cd ~/.vim/bundle " git clone https://github.com/kien/ctrlp.vim.git let g:ctrlp_max_height = 30 let g:ctrlp_working_path_mode = 'ar' set wildignore+=*.pyc set wildignore+=*_build/* set wildignore+=*/coverage/* " Settings for python-mode " Note: I'm no longer using this. Leave this commented out " and uncomment the part about jedi-vim instead " cd ~/.vim/bundle " git clone https://github.com/klen/python-mode "" map g :call RopeGotoDefinition() "" let ropevim_enable_shortcuts = 1 "" let g:pymode_rope_goto_def_newwin = "vnew" "" let g:pymode_rope_extended_complete = 1 "" let g:pymode_breakpoint = 0 "" let g:pymode_syntax = 1 "" let g:pymode_syntax_builtin_objs = 0 "" let g:pymode_syntax_builtin_funcs = 0 "" map b Oimport ipdb; ipdb.set_trace() # BREAKPOINT " let g:SuperTabDefaultCompletionType = "" " Settings for jedi-vim " cd ~/.vim/bundle " git clone git://github.com/davidhalter/jedi-vim.git " let g:jedi#usages_command = "z" " let g:jedi#popup_on_dot = 1 " let g:jedi#popup_select_first = 0 " let g:jedi#force_py_version = 3 " let g:jedi#completions_command = '.' " let g:jedi#show_call_signatures = 1 " map b Oimport ipdb; ipdb.set_trace() # BREAKPOINT " Map C-a to select entire file "nnoremap ggVG " Real vimmers dont use those noremap noremap noremap noremap " Do splits with Leader-\ and Leader-- " nnoremap :vsp " nnoremap :sp noremap \ :vsp noremap - :sp " NERDTree settings " Open NERDTree by default "autocmd VimEnter * NERDTree "autocmd VimEnter * wincmd p " Toggle NEDRTree plugin noremap :NERDTreeToggle let NERDTreeIgnore = ['\.pyc$', '__pycache__'] let NERDTreeShowHidden=1 " Better navigating through omnicomplete option list " See "http://stackoverflow.com/questions/2170023/how-to-map-keys-for-popup-menu-in-vim set completeopt=longest,menuone function! OmniPopup(action) if pumvisible() if a:action == 'j' return "\" elseif a:action == 'k' return "\" endif endif return a:action endfunction "inoremap =OmniPopup('j') "inoremap =OmniPopup('k') set omnifunc=jedi#completions :"py3 import sys; sys.path[2]='/root/.virtualenvs/django/bin/python' " set omnifunc=syntaxcomplete#Complete " Python folding " mkdir -p ~/.vim/ftplugin " wget -O ~/.vim/ftplugin/python_editing.vim "http://www.vim.org/scripts/download_script.php?src_id=5492 set foldenable " Auto activate virtual enviorment let g:virtualenv_auto_activate = 1 " Keep undo history even after closing file set undofile " Setups template files (more on this - https://shapeshed.com/vim-templates/) if has("autocmd") augroup templates autocmd BufNewFile *.py 0r ~/.vim/templates/skeleton.py autocmd BufNewFile *.sh 0r ~/.vim/templates/skeleton.sh augroup END endif " comment out highlighted lines according to file type " put a line like the following in your ~/.vim/filetype.vim file " and remember to turn on filetype detection: filetype on " au! BufRead,BufNewFile *.sh,*.tcl,*.php,*.pl let Comment="#" " if the comment character for a given filetype happens to be @ " then use let Comment="\@" to avoid problems... function! CommentLines() "let Comment="#" " shell, tcl, php, perl exe ":s@^@".g:Comment."@g" exe ":s@$@".g:EndComment."@g" endfunction " map visual mode keycombo 'co' to this function vmap co :call CommentLines() " Encryption algo (vim -x file) set cm=blowfish2 " Improve perfomance with long lines set synmaxcol=200 set autoread " Autosave " augroup autoSaveAndRead " autocmd! " autocmd TextChanged,InsertLeave,FocusLost * silent! wall " autocmd CursorHold * silent! checktime " augroup END " Lion alignment operator config (see https://github.com/tommcdo/vim-lion) let b:lion_squeeze_spaces = 1 set showmatch set matchtime=3 " Fold functions in bash let g:sh_fold_enabled=3 " Recompute syntax highlighting nnoremap :syntax sync fromstart autocmd FileType markdown syntax sync fromstart set cursorline set scrolloff=3 set sidescrolloff=3 " Easier line joining if v:version > 703 || v:version == 703 && has('patch541') set formatoptions+=j endif set relativenumber nnoremap Q :qa " Remap ; to be : - save 1 key press :P nnoremap ; : nnoremap : ;