" vimrc adapted from http://fisadev.github.io/fisa-vim-config/ by " geoffmcnamara " Fisa-vim-config " http://fisadev.github.io/fisa-vim-config/ " version: 8.3.1 " ============================================================================ " Vim-plug initialization " Avoid modify this section, unless you are very sure of what you are doing let vim_plug_just_installed = 0 let vim_plug_path = expand('~/.vim/autoload/plug.vim') if !filereadable(vim_plug_path) echo "Installing Vim-plug..." echo "" silent !mkdir -p ~/.vim/autoload silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim let vim_plug_just_installed = 1 endif " manually load vim-plug the first time if vim_plug_just_installed :execute 'source '.fnameescape(vim_plug_path) endif " Obscure hacks done, you can now modify the rest of the .vimrc as you wish :) " ============================================================================ " ============================================================================ " Active plugins " You can disable or add new ones here: " this needs to be here, so vim-plug knows we are declaring the plugins we " want to use call plug#begin('~/.vim/plugged') " Plugins from github repos: " Override configs by directory "Plug 'arielrossanigo/dir-configs-override.vim' " Better file browser Plug 'scrooloose/nerdtree' " Code commenter Plug 'scrooloose/nerdcommenter' " Class/module browser Plug 'majutsushi/tagbar' " Code and files fuzzy finder Plug 'ctrlpvim/ctrlp.vim' " Extension to ctrlp, for fuzzy command finder Plug 'fisadev/vim-ctrlp-cmdpalette' " Zen coding Plug 'mattn/emmet-vim' " Git integration Plug 'motemen/git-vim' " Tab list panel Plug 'kien/tabman.vim' " Airline Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' " Terminal Vim with 256 colors colorscheme Plug 'fisadev/fisa-vim-colorscheme' " Consoles as buffers Plug 'rosenfeld/conque-term' " Pending tasks list Plug 'fisadev/FixedTaskList.vim' " Surround Plug 'tpope/vim-surround' " Autoclose Plug 'Townk/vim-autoclose' " Indent text object Plug 'michaeljsmith/vim-indent-object' " Indentation based movements Plug 'jeetsukumaran/vim-indentwise' " Python autocompletion, go to definition. Plug 'davidhalter/jedi-vim' " Better autocompletion Plug 'Shougo/neocomplcache.vim' " Snippets manager (SnipMate), dependencies, and snippets repo Plug 'MarcWeber/vim-addon-mw-utils' Plug 'tomtom/tlib_vim' Plug 'honza/vim-snippets' Plug 'garbas/vim-snipmate' " Git/mercurial/others diff icons on the side of the file lines Plug 'mhinz/vim-signify' " Automatically sort python imports Plug 'fisadev/vim-isort' " Drag visual blocks arround Plug 'fisadev/dragvisuals.vim' " Window chooser Plug 't9md/vim-choosewin' " Python and other languages code checker "Plug 'scrooloose/syntastic' " Paint css colors with the real color Plug 'lilydjwg/colorizer' " Ack code search (requires ack installed in the system) Plug 'mileszs/ack.vim' if has('python') " YAPF formatter for Python Plug 'pignacio/vim-yapf-format' endif " Relative numbering of lines (0 is the current line) " (disabled by default because is very intrusive and can't be easily toggled " on/off. When the plugin is present, will always activate the relative " numbering every time you go to normal mode. Author refuses to add a setting " to avoid that) " Plug 'myusuf3/numbers.vim' nnoremap rnu :set rnu! " Plugins from vim-scripts repos: " Search results counter Plug 'vim-scripts/IndexedSearch' " XML/HTML tags navigation Plug 'vim-scripts/matchit.zip' " Gvim colorscheme Plug 'vim-scripts/Wombat' " Yank history navigation Plug 'vim-scripts/YankRing.vim' " ALE Plug 'https://github.com/w0rp/ale.git' " Calendar Plug 'https://github.com/itchyny/calendar.vim' " TaskWarrior Plug 'blindFS/vim-taskwarrior' " Build a Table of Contents in markdown Plug 'mzlogin/vim-markdown-toc' " This is fun but I just don't use it enough so it is commented " Plug 'vim-scripts/dbext.vim' " Tell vim-plug we finished declaring plugins, so it can load them call plug#end() " ============================================================================ " Install plugins the first time vim runs if vim_plug_just_installed echo "Installing Bundles, please ignore key map error messages" :PlugInstall endif " ============================================================================ " Vim settings and mappings " You can edit them as you wish " no vi-compatible set nocompatible " allow plugins by file type (required for plugins!) filetype plugin on filetype indent on " tabs and spaces handling set expandtab set tabstop=2 set softtabstop=2 set shiftwidth=2 " tab length exceptions on some file types autocmd FileType html setlocal shiftwidth=4 tabstop=4 softtabstop=4 autocmd FileType htmldjango setlocal shiftwidth=4 tabstop=4 softtabstop=4 autocmd FileType javascript setlocal shiftwidth=4 tabstop=4 softtabstop=4 " always show status bar set ls=2 " incremental search set incsearch " highlighted search results set hlsearch " syntax highlight on syntax on " show line numbers "set nu " set a toggle for numbering nnoremap nu :set nonu! " tab navigation mappings map tn :tabn map tp :tabp map tm :tabm map tt :tabnew map ts :tab split map :tabn imap :tabn map :tabp imap :tabp " navigate windows with meta+arrows map l map h map k map j imap l imap h imap k imap j " old autocomplete keyboard shortcut imap " Comment this line to enable autocompletion preview window " (displays documentation related to the selected completion option) " Disabled by default because preview makes the window flicker set completeopt-=preview " save as sudo ca w!! w !sudo tee "%" " simple recursive grep nmap ,r :Ack nmap ,wr :Ack " use 256 colors when possible if (&term =~? 'mlterm\|xterm\|xterm-256\|screen-256') || has('nvim') let &t_Co = 256 " colorscheme fisa else colorscheme delek endif " colors for gvim if has('gui_running') colorscheme wombat endif " when scrolling, keep cursor 3 lines away from screen border set scrolloff=3 " autocompletion of files and commands behaves like shell " (complete only the common part, list the options that match) set wildmode=list:longest " better backup, swap and undos storage set directory=~/.vim/dirs/tmp " directory to place swap files in set backup " make backup files set backupdir=~/.vim/dirs/backups " where to put backup files set undofile " persistent undos - undo after you re-open the file set undodir=~/.vim/dirs/undos set viminfo+=n~/.vim/dirs/viminfo " store yankring history file there too let g:yankring_history_dir = '~/.vim/dirs/' " create needed directories if they don't exist if !isdirectory(&backupdir) call mkdir(&backupdir, "p") endif if !isdirectory(&directory) call mkdir(&directory, "p") endif if !isdirectory(&undodir) call mkdir(&undodir, "p") endif " ============================================================================ " Plugins settings and mappings " Edit them as you wish. " Tagbar ----------------------------- " toggle tagbar display map :TagbarToggle " autofocus on tagbar open let g:tagbar_autofocus = 1 " NERDTree ----------------------------- " toggle nerdtree display map :NERDTreeToggle " open nerdtree with the current file selected nmap ,t :NERDTreeFind " don;t show these file types let NERDTreeIgnore = ['\.pyc$', '\.pyo$'] " Tasklist ------------------------------ " show pending tasks list map :TaskList " by PLUG default t :TaskList " Tokens appear to be case insensitive let g:tlTokenList = ['TODO','ToDo','WIP','DEBUG','FIXME','XXX','xxx'] " Isort ------------------------------ " These are not necessary but I was experimenting and left them in. let g:vim_isort_map = '' let g:vim_isort_python_version = 'python3' " CtrlP ------------------------------ " file finder mapping let g:ctrlp_map = ',e' " tags (symbols) in current file finder mapping nmap ,g :CtrlPBufTag " tags (symbols) in all files finder mapping nmap ,G :CtrlPBufTagAll " general code finder in all files mapping nmap ,f :CtrlPLine " recent files finder mapping nmap ,m :CtrlPMRUFiles " commands finder mapping nmap ,c :CtrlPCmdPalette " to be able to call CtrlP with default search text function! CtrlPWithSearchText(search_text, ctrlp_command_end) execute ':CtrlP' . a:ctrlp_command_end call feedkeys(a:search_text) endfunction " same as previous mappings, but calling with current word as default text nmap ,wg :call CtrlPWithSearchText(expand(''), 'BufTag') nmap ,wG :call CtrlPWithSearchText(expand(''), 'BufTagAll') nmap ,wf :call CtrlPWithSearchText(expand(''), 'Line') nmap ,we :call CtrlPWithSearchText(expand(''), '') nmap ,pe :call CtrlPWithSearchText(expand(''), '') nmap ,wm :call CtrlPWithSearchText(expand(''), 'MRUFiles') nmap ,wc :call CtrlPWithSearchText(expand(''), 'CmdPalette') " don't change working directory let g:ctrlp_working_path_mode = 0 " ignore these files and folders on file finder let g:ctrlp_custom_ignore = { \ 'dir': '\v[\/](\.git|\.hg|\.svn|node_modules)$', \ 'file': '\.pyc$\|\.pyo$', \ } "" Syntastic ------------------------------ "" show list of errors and warnings on the current file "nmap e :Errors "" check also when just opened the file "let g:syntastic_check_on_open = 1 "" don't put icons on the sign column (it hides the vcs status icons of signify) "let g:syntastic_enable_signs = 0 "" custom icons (enable them if you use a patched font, and enable the previous "" setting) ""let g:syntastic_error_symbol = '✗' ""let g:syntastic_warning_symbol = '⚠' ""let g:syntastic_style_error_symbol = '✗' ""let g:syntastic_style_warning_symbol = '⚠' " Jedi-vim ------------------------------ " All these mappings work only for python code: " Go to definition let g:jedi#goto_command = ',d' " Find ocurrences let g:jedi#usages_command = ',o' " Find assignments let g:jedi#goto_assignments_command = ',a' " Go to definition in new tab nmap ,D :tab split:call jedi#goto() " NeoComplCache ------------------------------ " most of them not documented because I'm not sure how they work " (docs aren't good, had to do a lot of trial and error to make " it play nice) let g:neocomplcache_enable_at_startup = 1 let g:neocomplcache_enable_ignore_case = 1 let g:neocomplcache_enable_smart_case = 1 let g:neocomplcache_enable_auto_select = 1 let g:neocomplcache_enable_fuzzy_completion = 1 let g:neocomplcache_enable_camel_case_completion = 1 let g:neocomplcache_enable_underbar_completion = 1 let g:neocomplcache_fuzzy_completion_start_length = 1 let g:neocomplcache_auto_completion_start_length = 1 let g:neocomplcache_manual_completion_start_length = 1 let g:neocomplcache_min_keyword_length = 1 let g:neocomplcache_min_syntax_length = 1 " complete with words from any opened file let g:neocomplcache_same_filetype_lists = {} let g:neocomplcache_same_filetype_lists._ = '_' " TabMan ------------------------------ " mappings to toggle display, and to focus on it let g:tabman_toggle = 'tl' let g:tabman_focus = 'tf' " to open all buffers in tabs - tab split all nnoremap tsa :bufdo tab split " Autoclose ------------------------------ " Fix to let ESC work as espected with Autoclose plugin let g:AutoClosePumvisible = {"ENTER": "\", "ESC": "\"} "autocmd filetype markdown let g:AutoClosePairs_del = "`" autocmd filetype markdown let g:AutoClosePairs = {'"': '"', '{': '}', '''': '''', '(': ')'} " DragVisuals ------------------------------ " mappings to move blocks in 4 directions vmap DVB_Drag('left') vmap DVB_Drag('right') vmap DVB_Drag('down') vmap DVB_Drag('up') " mapping to duplicate block vmap D DVB_Duplicate() " Signify ------------------------------ " this first setting decides in which order try to guess your current vcs " UPDATE it to reflect your preferences, it will speed up opening files let g:signify_vcs_list = [ 'git', 'hg' ] " mappings to jump to changed blocks nmap sn (signify-next-hunk) nmap sp (signify-prev-hunk) " nicer colors highlight DiffAdd cterm=bold ctermbg=none ctermfg=119 highlight DiffDelete cterm=bold ctermbg=none ctermfg=167 highlight DiffChange cterm=bold ctermbg=none ctermfg=227 highlight SignifySignAdd cterm=bold ctermbg=237 ctermfg=119 highlight SignifySignDelete cterm=bold ctermbg=237 ctermfg=167 highlight SignifySignChange cterm=bold ctermbg=237 ctermfg=227 " Window Chooser ------------------------------ " mapping nmap - (choosewin) " show big letters let g:choosewin_overlay_enable = 1 " easy switch windows hitting - twice nnoremap -- " Airline ------------------------------ let g:airline_powerline_fonts = 0 "let g:airline_theme = 'bubblegum' let g:airline_theme = 'papercolor' let g:airline#extensions#whitespace#enabled = 0 let g:airline_powerline_fonts = 1 " to use fancy symbols for airline, uncomment the following lines and use a " patched font (more info on the README.rst) if !exists('g:airline_symbols') let g:airline_symbols = {} endif "let g:airline_left_sep = '⮀' "let g:airline_left_alt_sep = '⮁' "let g:airline_right_sep = '⮂' "let g:airline_right_alt_sep = '⮃' "let g:airline_symbols.branch = '⭠' "let g:airline_symbols.readonly = '⭤' "let g:airline_symbols.linenr = '⭡' " "==== wizardry and spells ====" " use :map <--- mapped cmds " "=============================" " == mardown preview == " change this to load your favorite markdown viewer/editor nnoremap pre :! typora % "======= remember cursor and viminfo settings ======== " Tell vim to remember certain things when we exit using set viminfo= " '10 : marks will be remembered for up to 10 previously edited files " \"100 : will save up to 100 lines for each register " :20 : up to 20 lines of command-line history will be remembered " % : saves and restores the buffer list " n... : where to save the viminfo files " P set viminfo='10,\"100,:20,%,n~/.vim/dirs/viminfo " now function that restores the cursor position and its autocmd so that it gets triggered: function! ResCur() if line("'\"") <= line("$") normal! g`" return 1 endif endfunction augroup resCur autocmd! autocmd BufWinEnter * call ResCur() augroup END "======= EOB remember cursor and viminfo settings ======== " to quickly edit this file " I use "-E" or a similar argument to edit the file itself; that is why " I used a capital "E" here. You may want to change this. nnoremap E :vsplit ~/.vimrc " source this ~/.vimrc file nnoremap so :so ~/.vimrc " insert date-time stamp nnoremap da O:r!date +"\%Y\%m\%d-\%H\%M"ddo " numbers on or off nnoremap nn :set nonumber " nonumber nnoremap sn :set number " set number " Plug commands nnoremap ps :PlugStatus nnoremap pu :PlugUpdate " ALEToggle nnoremap at :ALEToggle nnoremap an :ALENext nnoremap ap :ALEPrevious nnoremap ai :ALEInfo " modeline settings set modeline set modelines=5 nnoremap mlt gg o# vim: set syntax=none nospell: nnoremap mlb Go# vim: set syntax=none nospell: " toggle spelling use: _sp imap sp :setlocal spell! spelllang=en_us nmap sp :setlocal spell! spelllang=en_us " split and buffer settings :set splitright :set splitbelow " open all buffers in vert splits nnoremap sba :vertical sba " delete the current buffer from screen nnoremap close :bdelete " list and select buffer to edit nnoremap lsb :ls:b " to expand the current window 10 places to the right nnoremap > 10> " to shrink the current window 10 places to the left nnoremap < 10< " to make all the windows equal in size nnoremap = 10= " this will make the current buffer full if all the others have saved changes nnoremap ful :only " to change horizontal split to vertical split-top full height nnoremap h2v tH " to change vertical split to horizontal split - top full width nnoremap v2h tK " quick Conque shell - use :q to quit.. note cursor pos change nnoremap cs :ConqueTermSplit bash " Tagbar nnoremap tb :Tagbar let g:tagbar_autoclose = 1 " vim-surround " these a built off of ys " in these examples iw = "inner word" " use: ysiw to surround current word with " use: ysiW to surround a WORD " double quote WORD - note W vs w " you can *not* use nnoremap on these but you can use nmap " use: ys$ to surround from here to end of line " ys3w( <--yank,surround 3 words with () " ys <--for add cs <-- for change ds <-- for delete " sd=surround double (quote) nmap sd ysiW" " ss=surround single (quote) nmap ss ysiW' " s(= surround with () no space added nmap s( ys$) " YankRing nnoremap yr :YRShow " Some other magic " fixes my typo - changes a mistyped :Wq to :wq command! Wq wq " NeoComplCache nnoremap neo :NeoComplCacheToggle " Key sequence timeout - default was 1000 set timeout timeoutlen=1500 " Set text filetypes autocmd BufRead,BufNewFile *.nts set filetype=text " Calendar settings let g:calendar_google_calendar = 1 let g:calendar_google_task = 1 nnoremap cal :Calendar " dbext SQLite let g:dbext_default_profile_myphile='type=SQLITE:dbname=/data/share/db_dir/myphile.db' " make a word all caps nnoremap acap gUiw " Sudo Write command! SW :execute ':silent :w !sudo tee % > /dev/null' | :edit! "" modeline settings "set modeline "set modelines=5 nnoremap mlt gg o# vim: set syntax=none nospell: nnoremap mlb Go# vim: set syntax=none nospell: " markdown a block of code for a paragraph " vim-surround is great but it doesn't do this... nnoremap mdc {O```}i```O