scriptencoding utf-8 " ============================================================================ " Author: TaoBeier " Blog: http://moelove.info " Version: v18.09.0 " Update Time: 2018-09-01 " ============================================================================ " Vundle initialization " Avoid modify this section, unless you are very sure of what you are doing " no vi-compatible set nocompatible " Setting up Vundle - the best vim plugin manager let iCanHazVundle=1 let vundle_readme=expand('~/.vim/bundle/vundle/README.md') if !filereadable(vundle_readme) echo "Installing Vundle..." echo "" silent !mkdir -p ~/.vim/bundle silent !git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/vundle let iCanHazVundle=0 endif filetype off set rtp+=~/.vim/bundle/vundle/ call vundle#rc() " let Vundle manage Plugins Plugin 'VundleVim/Vundle.vim' " ============================================================================ " Active plugins " You can disable or add new ones here: " Plugins from github repos: " Better file browser Plugin 'scrooloose/nerdtree' " Code commenter Plugin 'scrooloose/nerdcommenter' " Class/module browser Plugin 'majutsushi/tagbar' " Code and files fuzzy finder Plugin 'ctrlpvim/ctrlp.vim' " Extension to ctrlp, for fuzzy command finder Plugin 'fisadev/vim-ctrlp-cmdpalette' " Zen coding Plugin 'mattn/emmet-vim' " A Git wrapper so awesome Plugin 'tpope/vim-fugitive' " Tab management for Vim Plugin 'kien/tabman.vim' " Airline Plugin 'vim-airline/vim-airline' Plugin 'vim-airline/vim-airline-themes' " Consoles as buffers Plugin 'rosenfeld/conque-term' " Pending tasks list Plugin 'fisadev/FixedTaskList.vim' " Surround Plugin 'tpope/vim-surround' " Autoclose Plugin 'Townk/vim-autoclose' " Indent text object Plugin 'michaeljsmith/vim-indent-object' " Python mode (indentation, doc, refactor, lints, code checking, motion and " operators, highlighting, run and ipdb breakpoints) Plugin 'python-mode/python-mode' " Better autocompletion Plugin 'Shougo/neocomplcache.vim' " Snippets manager (SnipMate), dependencies, and snippets repo Plugin 'MarcWeber/vim-addon-mw-utils' Plugin 'tomtom/tlib_vim' Plugin 'honza/vim-snippets' Plugin 'garbas/vim-snipmate' " awesome colorscheme Plugin 'tomasr/molokai' " Git/mercurial/others diff icons on the side of the file lines Plugin 'mhinz/vim-signify' " Automatically sort python imports Plugin 'fisadev/vim-isort' " Drag visual blocks arround Plugin 'fisadev/dragvisuals.vim' " Window chooser Plugin 't9md/vim-choosewin' " Python and other languages code checker Plugin 'vim-syntastic/syntastic' " Paint css colors with the real color Plugin 'lilydjwg/colorizer' " Relative numbering of lines (0 is the current line) " Require Vim 7.3+ " Plugin 'myusuf3/numbers.vim' " javascript complete after install the plugin, you must cd the install " directory and run `npm install`, then add a .tern-project config file " the doc at http://ternjs.net/doc/manual.html#vim Plugin 'ternjs/tern_for_vim' " Golang Plugins Plugin 'fatih/vim-go' " JSX syntax highlight. Plugin 'mxw/vim-jsx' " Markdown syntastic highlight Plugin 'godlygeek/tabular' Plugin 'plasticboy/vim-markdown' " Markdown realtime preview " Before you want to use it, please run " `sudo npm -g install instant-markdown-d` Plugin 'suan/vim-instant-markdown' " Handlebars syntax highlighting Plugin 'mustache/vim-mustache-handlebars' " Vue.js syntax and highlighting Plugin 'tao12345666333/vim-vue' " True Sublime Text style multiple selections for Vim Plugin 'terryma/vim-multiple-cursors' " Modern database interface for Vim Plugin 'tpope/vim-dadbod' " Dockerfile support Plugin 'ekalinin/Dockerfile.vim' " Plugins from vim-scripts repos: " Search results counter Plugin 'IndexedSearch' " XML/HTML tags navigation Plugin 'matchit.zip' " Gvim colorscheme Plugin 'Wombat' " Yank history navigation Plugin 'YankRing.vim' " ============================================================================ " Install plugins the first time vim runs if iCanHazVundle == 0 echo "Installing Plugins, please ignore key map error messages" echo "" :PluginInstall endif " ============================================================================ " Vim settings and mappings " You can edit them as you wish " allow plugins by file type (required for plugins!) filetype plugin on filetype indent on " tabs and spaces handling set expandtab set tabstop=4 set softtabstop=4 set shiftwidth=4 " highlight cursor line and column set cursorline set cursorcolumn " hidden startup messages set shortmess=atI " auto read and write set autowrite set autoread " when deal with unsaved files ask what to do set confirm " no backup files set nobackup " other settings set langmenu=zh_CN.UTF-8 set mouse=a set whichwrap+=<,>,h,l,[,] set background=dark set encoding=utf-8 set backspace=2 " make backspace work like most other apps set backspace=indent,eol,start " tab length exceptions on some file types autocmd FileType html setlocal shiftwidth=2 tabstop=2 softtabstop=2 autocmd FileType htmldjango setlocal shiftwidth=2 tabstop=2 softtabstop=2 autocmd FileType javascript setlocal shiftwidth=2 tabstop=2 softtabstop=2 " auto open or close NERDTree autocmd vimenter * if !argc() | NERDTree | endif autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif " always show status bar set laststatus=2 " incremental search set incsearch " highlighted search results set hlsearch " search ignore case set ignorecase " muting search highlighting nnoremap :nohlsearch " syntax highlight on syntax on " show line numbers set nu " 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 " both recursive grep commands with internal or external (fast) grep command! -nargs=1 RecurGrep lvimgrep //gj ./**/*.* | lopen | set nowrap command! -nargs=1 RecurGrepFast silent exec 'lgrep! ./**/*.*' | lopen " mappings to call them nmap ,R :RecurGrep nmap ,r :RecurGrepFast " mappings to call them with the default word as search text nmap ,wR :RecurGrep nmap ,wr :RecurGrepFast " use 256 colors when possible if &term =~? 'mlterm\|xterm\|xterm-256\|screen-256' let &t_Co = 256 colorscheme molokai 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 zsh " (autocomplete menu) set wildmenu set wildmode=full " 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 " CtrlP ------------------------------ " file finder mapping let g:ctrlp_map = ',e' " hidden some types files let g:ctrlp_show_hidden = 1 set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.png,*.jpg,*.gif "Linux " 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)$', \ 'file': '\.pyc$\|\.pyo$', \ } " Syntastic ------------------------------ " show list of errors and warnings on the current file nmap e :Errors " turn to next or previous errors, after open errors list nmap n :lnext nmap p :lprevious " check also when just opened the file let g:syntastic_check_on_open = 1 " syntastic checker for javascript. " eslint is the only tool support JSX. " If you don't need write JSX, you can use jshint. " And eslint is slow, but not a hindrance " let g:syntastic_javascript_checkers = ['jshint'] let g:syntastic_javascript_checkers = ['eslint'] " 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 = '⚠' let g:syntastic_quiet_messages = { \ "regex": 'invalid-name\|missing-docstring'} " Python-mode ------------------------------ " don't use linter, we use syntastic for that let g:pymode_lint_on_write = 0 let g:pymode_lint_signs = 0 " don't fold python code on open let g:pymode_folding = 0 " don't load rope by default. Change to 1 to use rope let g:pymode_rope = 0 " open definitions on same window, and custom mappings for definitions and " occurrences let g:pymode_rope_goto_definition_bind = ',d' let g:pymode_rope_goto_definition_cmd = 'e' nmap ,D :tab split:PymodePython rope.goto() nmap ,o :RopeFindOccurrences " 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) " Disable AutoComplPop. let g:acp_enableAtStartup = 0 " Use neocomplcache. let g:neocomplcache_enable_at_startup = 1 let g:neocomplcache_enable_ignore_case = 1 " Use smartcase. 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 " Set minimum syntax keyword length. let g:neocomplcache_min_keyword_length = 1 let g:neocomplcache_min_syntax_length = 1 let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*' " complete with workds from any opened file let g:neocomplcache_same_filetype_lists = {} let g:neocomplcache_same_filetype_lists._ = '_' " : completion. inoremap pumvisible() ? "\" : "\" " Define keyword. if !exists('g:neocomplcache_keyword_patterns') let g:neocomplcache_keyword_patterns = {} endif let g:neocomplcache_keyword_patterns['default'] = '\h\w*' " Plugin key-mappings. inoremap neocomplcache#undo_completion() inoremap neocomplcache#complete_common_string() " , : close popup and delete backword char. inoremap neocomplcache#smart_close_popup()."\" inoremap neocomplcache#smart_close_popup()."\" inoremap neocomplcache#close_popup() inoremap neocomplcache#cancel_popup() " TabMan ------------------------------ " mappings to toggle display, and to focus on it let g:tabman_toggle = 'tl' let g:tabman_focus = 'tf' " Autoclose ------------------------------ " Fix to let ESC work as espected with Autoclose plugin let g:AutoClosePumvisible = {"ENTER": "\", "ESC": "\"} " 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 " Airline ------------------------------ let g:airline_powerline_fonts = 1 let g:airline_theme = 'bubblegum' "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#extensions#whitespace#enabled = 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 = '⭡' 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 = '' " new file set title and turn to endline autocmd BufNewFile *.sh,*.py,*.rb exec ":call SetTitle()" function SetTitle() if &filetype == 'sh' call setline(1,"\#!/bin/bash") call append(line("."), "") elseif &filetype == 'python' call setline(1,"#!/usr/bin/env python") call append(line("."),"# coding=utf-8") call append(line(".")+1, "") elseif &filetype == 'ruby' call setline(1,"#!/usr/bin/env ruby") call append(line("."),"# encoding: utf-8") call append(line(".")+1, "") endif endfunction autocmd BufNewFile * normal G " Vim-jsx ------------------------------ " if you use JSX syntax in .js file, please enable it. let g:jsx_ext_required = 0 " Vim-markdown ------------------------------ " Disabled automatically folding let g:vim_markdown_folding_disabled=1 " LeTeX math let g:vim_markdown_math=1 " Highlight YAML frontmatter let g:vim_markdown_frontmatter=1 " Vim-instant-markdown ----------------- " If it takes your system too much, you can specify " let g:instant_markdown_slow = 1 " if you don't want to manually control it " you can open this setting " and when you open this, you can manually trigger preview " via the command :InstantMarkdownPreview let g:instant_markdown_autostart = 0