"Balkian " Auto-install plug-vim if empty(glob('~/.local/share/nvim/site/autoload/plug.vim')) !curl -fLo $HOME/.local/share/nvim/site/autoload/plug.vim --create-dirs "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif "set nocompatible " be iMproved "filetype off " required! call plug#begin(stdpath('data') . '/plugged') echo stdpath('data') Plug 'gmarik/vundle' Plug 'LaTeX-Box-Team/LaTeX-Box' Plug 'tpope/vim-repeat' Plug 'tpope/vim-unimpaired' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-surround' Plug 'tpope/vim-abolish' Plug 'scrooloose/nerdtree' Plug 'scrooloose/nerdcommenter' Plug 'scrooloose/syntastic' Plug 'ervandew/supertab' Plug 'majutsushi/tagbar' Plug 'MarcWeber/vim-addon-mw-utils' " for vim-snippets Plug 'tomtom/tlib_vim' Plug 'honza/vim-snippets' Plug 'garbas/vim-snipmate' Plug 'mattn/webapi-vim' Plug 'mattn/gist-vim' Plug 'klen/python-mode' Plug 'ivanov/vim-ipython' Plug 'jamessan/vim-gnupg' Plug 'Lokaltog/vim-easymotion' Plug 'vim-scripts/YankRing.vim' Plug 'kien/ctrlp.vim' Plug 'sgur/ctrlp-extensions.vim' Plug 'sjl/gundo.vim' Plug 'bling/vim-airline' Plug 'vim-airline/vim-airline-themes' Plug 'xolox/vim-misc' Plug 'xolox/vim-notes' Plug 'beloglazov/vim-online-thesaurus' Plug 'vim-scripts/ShowMarks' Plug 'atweiden/vim-dragvisuals' "Plug 'tomasr/molokai' Plug 'chriskempson/base16-vim' Plug 'elzr/vim-json' Plug 'Rykka/riv.vim' Plug 'niklasl/vim-rdf' Plug 'lepture/vim-jinja' call plug#end() filetype plugin indent on " required! set hidden " To start working with buffers instead of tabs "highlight SpecialKey ctermfg=DarkGray set listchars=tab:>-,trail:~ set list set tabstop=4 set softtabstop=4 set shiftwidth=4 autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class au FileType py set textwidth=79 au FileType html set tabstop=2 shiftwidth=2 autocmd Filetype javascript set ts=4 sts=4 sw=4 expandtab smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class set expandtab set smarttab set autoindent set smartindent syntax on set ignorecase set smartcase set number "set paste set mouse=a set autochdir set showmatch set incsearch set hlsearch set ruler set wildmenu set autoread " faster commands noremap : " Better Map Leader let mapleader="," noremap \ , " Commenting blocks of code. I don't need it with NerdCommenter " autocmd FileType c,cpp,java,scala,javascript let b:comment_leader = '// ' " autocmd FileType sh,ruby,python let b:comment_leader = '# ' " autocmd FileType conf,fstab let b:comment_leader = '# ' " autocmd FileType tex let b:comment_leader = '% ' " autocmd FileType mail let b:comment_leader = '> ' " autocmd FileType vim let b:comment_leader = '" ' " noremap ,cc :silent s/^/=escape(b:comment_leader,'\/')/:nohlsearch " noremap ,cu :silent s/^\V=escape(b:comment_leader,'\/')//e:nohlsearch " map p "+gp map P "+gP noremap :w imap :w "Custom maps noremap n :NERDTreeToggle noremap t :TagbarOpen fj noremap f :CtrlPMixed noremap b :CtrlPBookmarkDir noremap l :CtrlPLine "Omni set completeopt=longest,menuone inoremap pumvisible() ? "\" : "\u\" inoremap pumvisible() ? '' : \ '=pumvisible() ? "\Down>" : ""' inoremap pumvisible() ? '' : \ '=pumvisible() ? "\Down>" : ""' inoremap (pumvisible() ? (col('.') > 1 ? 'i' : 'i') : '') . \ '=pumvisible() ? "\C-n>\C-p>\Down>" : ""' set spell spelllang=en_gb " tab navigation like firefox nnoremap :tabprevious nnoremap :tabnext nnoremap :tabnew inoremap :tabpreviousi inoremap :tabnexti "inoremap :tabnew nnoremap dd :bd " Save sessions function! RestoreSession() if argc() == 0 "vim called without arguments execute 'source ~/.vim/Session.vim' end endfunction nmap Sq :mksession! ~/.vim/Session.vim:qa! nmap SQ :mksession! ~/.vim/Session.vim:wqa nmap SO :so ~/.vim/Session.vim set sessionoptions+=resize,winpos "autocmd VimEnter * call RestoreSession() "Make tabs and buffers work better ":se switchbuf=usetab,newtab " Color and shit "set t_Co=256 "set background=dark "colo solarized colo base16-tomorrow-night "hi SpellBad ctermfg=Red "Statusline set statusline=%t%h%m%r%y%{fugitive#statusline()}\%=[%{strlen(&fenc)?&fenc:'none'},%{&ff}]\ \ %c,%l/%L\ %P set laststatus=2 " Now that I use Airline, there is no need for this :) "function! InsertStatuslineColor(mode) "if a:mode == 'i' "hi statusline guibg=Red ctermbg=Red guifg=White ctermfg=White "elseif a:mode == 'r' "hi statusline guibg=Blue ctermfg=White guifg=White ctermbg=Blue "else "hi statusline ctermbg=Yellow guibg=Yellow ctermfg=Black guifg=Black "endif "endfunction "call InsertStatuslineColor('') "au InsertEnter * call InsertStatuslineColor(v:insertmode) "au InsertLeave * call InsertStatuslineColor('') au BufRead,BufNewFile *.md set filetype=markdown "Diff the buffer and the original command DiffOrig let g:diffline = line('.') | vert new | set bt=nofile | r # | 0d_ | diffthis | :exe "norm! ".g:diffline."G" | wincmd p | diffthis | wincmd p nnoremap do :DiffOrig nnoremap dc :q:diffoff:exe "norm! ".g:diffline."G" set guifont=DejaVu\ Sans\ Mono set foldmethod=syntax set foldclose=all set foldopen+=insert,jump set nofoldenable " Matching for html if !exists('g:loaded_matchit') && findfile('plugin/matchit.vim', &rtp) ==# '' runtime! macros/matchit.vim endif """""""""""""""""""" " GnuPG Extensions " """""""""""""""""""" " Tell the GnuPG plugin to armor new files. let g:GPGPreferArmor=1 " Tell the GnuPG plugin to sign new files. let g:GPGPreferSign=1 augroup GnuPGExtra " Set extra file options. autocmd BufReadCmd,FileReadCmd *.\(gpg\|asc\|pgp\) call SetGPGOptions() " Automatically close unmodified files after inactivity. autocmd CursorHold *.\(gpg\|asc\|pgp\) quit augroup END function SetGPGOptions() " Set updatetime to 1 minute. set updatetime=60000 " Fold at markers. "set foldmethod=marker setlocal foldmethod=expr setlocal foldexpr=(getline(v:lnum)=~'^$')?-1:((indent(v:lnum)'.indent(v:lnum+1)):indent(v:lnum)) set foldtext=getline(v:foldstart) " Automatically close all folds. set foldclose=all " Only open folds with insert commands. set foldopen=insert endfunction " CtrlP " Do not clear the file cache on exit let g:ctrlp_clear_cache_on_exit = 0 let g:ctrlp_extensions = [ 'mixed' ] let g:ctrlp_regexp = 0 let g:ctrlp_cmd = 'CtrlPMixed' " Git things nmap gs :Gstatus nmap gd :Gdiff nmap gl :Glog " Gundo magic nnoremap u :GundoToggle " YankRing+Ctrl-P map y :YRShow let g:yankring_replace_n_pkey = '' let g:yankring_replace_n_nkey = '' let g:airline_left_sep='' let g:airline_right_sep='|' 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_theme='base16' " Notes :let g:notes_directories = ['~/Dropbox/Notes'] " Block move vmap DVB_Drag('left') vmap DVB_Drag('right') vmap DVB_Drag('down') vmap DVB_Drag('up') vmap D DVB_Duplicate() function! s:get_visual_selection() " Why is this not a built-in Vim script function?! let [lnum1, col1] = getpos("'<")[1:2] let [lnum2, col2] = getpos("'>")[1:2] let lines = getline(lnum1, lnum2) let lines[-1] = lines[-1][: col2 - (&selection == 'inclusive' ? 1 : 2)] let lines[0] = lines[0][col1 - 1:] return join(lines, "\n") endfunction " Thesaurus let g:online_thesaurus_map_keys = 0 nnoremap k :OnlineThesaurusCurrentWord vnoremap k :Thesaurus =get_visual_selection() " Resizing nnoremap + :exe "resize " . (winheight(0) * 3/2) nnoremap - :exe "resize " . (winheight(0) * 2/3) nnoremap + :exe "resize " . (winheight(0) * 3/2) nnoremap > :exe "vertical resize " . (winwidth(0) * 3/2) nnoremap < :exe "vertical resize " . (winwidth(0) * 2/3) " Clipboard magic if has('unnamedplus') set clipboard=unnamed,unnamedplus endif set cursorline set guioptions-=m "remove menu bar set guioptions-=T "remove toolbar set guioptions-=r "remove right-hand scroll bar set guioptions-=L "remove left-hand scroll bar let g:pymode_rope_project_root = "~/.ropeprojects" " backup to ~/.tmp set backup set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp set backupskip=/tmp/*,/private/tmp/* set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp set writebackup " Easymotion let g:EasyMotion_do_mapping = 0 " Disable default mappings " Bi-directional find motion " Jump to anywhere you want with minimal keystrokes, with just one key binding. " `s{char}{label}` nmap s (easymotion-s) nmap w (easymotion-bd-w) " or " `s{char}{char}{label}` " Need one more keystroke, but on average, it may be more comfortable. nmap s (easymotion-s2) " Turn on case sensitive feature let g:EasyMotion_smartcase = 1