这是 taobeier 精心打造的 vim 环境配置,支持 python、javascript、vue.js、golang 和 markdown。
<a target="_blank"></a>
你需要一个有 python 支持的 vim 版本。请使用 <code>vim --version | grep +python</code> 来检查确认。
debian/ubuntu 平台
<code>sudo apt-get install python vim exuberant-ctags git</code>
<code>sudo pip install dbgp pep8 flake8 pyflakes isort</code>
redhat/centos 平台
centos 6.7 的 yum 源自带的 python 版本较旧,推荐自行安装 python2.7。
<code>sudo yum install python vim ctags git</code>
mac os 平台
<code>brew install python vim git</code>
<code>wget http://tenet.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz && tar -zxvf ctags-5.8.tar.gz && cd ctags-5.8 && ./configure && make && sudo make install</code>
<code>wget https://raw.githubusercontent.com/tao12345666333/vim/master/vimrc -o $home/.vimrc</code>
打开 vim,它将会自动安装插件。请耐心等待它完成。或者你可以使用下面的命令来自行安装。
<code>vim -e -u $home/.vimrc +qall</code>
享受你的 vim 并个性化它吧!
配置(截取了部分)
<code>" let vundle manage vundle</code>
<code>plugin 'gmarik/vundle'</code>
<code></code>
<code>" ============================================================================</code>
<code>" active plugins</code>
<code>" you can disable or add new ones here:</code>
<code>" plugins from github repos:</code>
<code>" better file browser</code>
<code>plugin 'scrooloose/nerdtree'</code>
<code>" code commenter</code>
<code>plugin 'scrooloose/nerdcommenter'</code>
<code>" class/module browser</code>
<code>plugin 'majutsushi/tagbar'</code>
<code>" code and files fuzzy finder</code>
<code>plugin 'kien/ctrlp.vim'</code>
<code>" extension to ctrlp, for fuzzy command finder</code>
<code>plugin 'fisadev/vim-ctrlp-cmdpalette'</code>
<code>" zen coding</code>
<code>plugin 'mattn/emmet-vim'</code>
<code>" git integration</code>
<code>plugin 'motemen/git-vim'</code>
<code>" tab list panel</code>
<code>plugin 'kien/tabman.vim'</code>
支持操作
命令
解释
<code>:pluginlist</code>
列出所有插件
<code>:plugininstall(!)</code>
安装/更新插件
<code>:pluginsearch(!) foo</code>
搜索 foo 相关的插件
<code>:pluginclean(!)</code>
清理未使用的插件
<code>:pluginupdate</code>
更新插件
配置
<code>" auto open or close nerdtree</code>
<code>autocmd vimenter * if !argc() | nerdtree | endif</code>
<code>autocmd bufenter * if (winnr("$") == 1 && exists("b:nerdtreetype") && b:nerdtreetype == "primary") | q | endif</code>
<code>" nerdtree -----------------------------</code>
<code>" toggle nerdtree display</code>
<code>map <f3> :nerdtreetoggle<cr></code>
<code>" open nerdtree with the current file selected</code>
<code>nmap ,t :nerdtreefind<cr></code>
<code>" don;t show these file types</code>
<code>let nerdtreeignore = ['\.pyc$', '\.pyo$']</code>
快捷键
<code>f3</code>
打开/关闭 nerdtree
<code>,t</code>
打开 nerdtree 并选中当前文件
<code>" syntastic ------------------------------</code>
<code>" show list of errors and warnings on the current file</code>
<code>nmap <leader>e :errors<cr></code>
<code>" turn to next or previous errors, after open errors list</code>
<code>nmap <leader>n :lnext<cr></code>
<code>nmap <leader>p :lprevious<cr></code>
<code>" check also when just opened the file</code>
<code>let g:syntastic_check_on_open = 1</code>
<code>" syntastic checker for javascript.</code>
<code>" eslint is the only tool support jsx.</code>
<code>" if you don't need write jsx, you can use jshint.</code>
<code>" and eslint is slow, but not a hindrance</code>
<code>" let g:syntastic_javascript_checkers = ['jshint']</code>
<code>let g:syntastic_javascript_checkers = ['eslint']</code>
<code>" don't put icons on the sign column (it hides the vcs status icons of signify)</code>
<code>let g:syntastic_enable_signs = 0</code>
<code>" custom icons (enable them if you use a patched font, and enable the previous</code>
<code>" setting)</code>
<code>let g:syntastic_error_symbol = ''</code>
<code>let g:syntastic_warning_symbol = ''</code>
<code>let g:syntastic_style_error_symbol = ''</code>
<code>let g:syntastic_style_warning_symbol = ''</code>
特性
保存时自动进行语法静态检查,方便的错误提示及灵活的可扩展性。
<code>\e</code>
打开错误列表
<code>\n</code>
移动到下一个错误位置
<code>\p</code>
移动到上一个错误位置
<code>" signify ------------------------------</code>
<code>" this first setting decides in which order try to guess your current vcs</code>
<code>" update it to reflect your preferences, it will speed up opening files</code>
<code>let g:signify_vcs_list = [ 'git', 'hg' ]</code>
<code>" mappings to jump to changed blocks</code>
<code>nmap <leader>sn <plug>(signify-next-hunk)</code>
<code>nmap <leader>sp <plug>(signify-prev-hunk)</code>
<code>" nicer colors</code>
<code>highlight diffadd cterm=bold ctermbg=none ctermfg=119</code>
<code>highlight diffdelete cterm=bold ctermbg=none ctermfg=167</code>
<code>highlight diffchange cterm=bold ctermbg=none ctermfg=227</code>
<code>highlight signifysignadd cterm=bold ctermbg=237 ctermfg=119</code>
<code>highlight signifysigndelete cterm=bold ctermbg=237 ctermfg=167</code>
<code>highlight signifysignchange cterm=bold ctermbg=237 ctermfg=227</code>
<code>:git [args]</code>
类似执行<code>git</code>命令一样
<code>:gstatus</code>
类似<code>git status</code>。在列表中使用<code>-</code>添加/移除文件
<code>:gcommit [args]</code>
类似 <code>git commit</code>
<code>:gmerge [args]</code>
类似 <code>git merge</code>
<code>:gpull [args]</code>
类似 <code>git pull</code>
<code>:gpush [args]</code>
类似 <code>git push</code>
<code>:gvdiff [revision]</code>
类似 <code>git push</code> 但是会切分窗口
更多详细的操作可以使用 <code>:help fugitive</code>。
<code>" tagbar -----------------------------</code>
<code>" toggle tagbar display</code>
<code>map <f4> :tagbartoggle<cr></code>
<code>" autofocus on tagbar open</code>
<code>let g:tagbar_autofocus = 1</code>
<code>f4</code>
打开 tag 列表
<code>" neocomplcache ------------------------------</code>
<code>" most of them not documented because i'm not sure how they work</code>
<code>" (docs aren't good, had to do a lot of trial and error to make</code>
<code>" it play nice)</code>
<code>" disable autocomplpop.</code>
<code>let g:acp_enableatstartup = 0</code>
<code>" use neocomplcache.</code>
<code>let g:neocomplcache_enable_at_startup = 1</code>
<code>let g:neocomplcache_enable_ignore_case = 1</code>
<code>" use smartcase.</code>
<code>let g:neocomplcache_enable_smart_case = 1</code>
<code>let g:neocomplcache_enable_auto_select = 1</code>
<code>let g:neocomplcache_enable_fuzzy_completion = 1</code>
<code>let g:neocomplcache_enable_camel_case_completion = 1</code>
<code>let g:neocomplcache_enable_underbar_completion = 1</code>
<code>let g:neocomplcache_fuzzy_completion_start_length = 1</code>
<code>let g:neocomplcache_auto_completion_start_length = 1</code>
<code>let g:neocomplcache_manual_completion_start_length = 1</code>
<code>" set minimum syntax keyword length.</code>
<code>let g:neocomplcache_min_keyword_length = 1</code>
<code>let g:neocomplcache_min_syntax_length = 1</code>
<code>let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'</code>
<code>" complete with workds from any opened file</code>
<code>let g:neocomplcache_same_filetype_lists = {}</code>
<code>let g:neocomplcache_same_filetype_lists._ = '_'</code>
<code>" <tab>: completion.</code>
<code>inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>"</code>
<code>" define keyword.</code>
<code>if !exists('g:neocomplcache_keyword_patterns')</code>
<code>let g:neocomplcache_keyword_patterns = {}</code>
<code>endif</code>
<code>let g:neocomplcache_keyword_patterns['default'] = '\h\w*'</code>
<code>" plugin key-mappings.</code>
<code>inoremap <expr><c-g> neocomplcache#undo_completion()</code>
<code>inoremap <expr><c-l> neocomplcache#complete_common_string()</code>
<code>" <c-h>, <bs>: close popup and delete backword char.</code>
<code>inoremap <expr><c-h> neocomplcache#smart_close_popup()."\<c-h>"</code>
<code>inoremap <expr><bs> neocomplcache#smart_close_popup()."\<c-h>"</code>
<code>inoremap <expr><c-y> neocomplcache#close_popup()</code>
<code>inoremap <expr><c-e> neocomplcache#cancel_popup()</code>
<code><tab></code>
使用 tab 键进行待提示项目选择
<code><c-g></code>
取消补全
<code><c-l></code>
完成待补全项中共同的字符串
<code><c-h></code>
关闭待选项
<code><c-y></code>
<code><c-e></code>
退出待选项
<code><bs></code>
<code>" window chooser ------------------------------</code>
<code>" mapping</code>
<code>nmap - <plug>(choosewin)</code>
<code>" show big letters</code>
<code>let g:choosewin_overlay_enable = 1</code>
<code>-</code>
开启窗口选择
<code>- [</code>
选择上一个 tab 的窗口
<code>- ]</code>
选择下一个 tab 的窗口
更多操作可以使用 <code>:help choosewin</code>。
<code>" tabman ------------------------------</code>
<code>" mappings to toggle display, and to focus on it</code>
<code>let g:tabman_toggle = 'tl'</code>
<code>let g:tabman_focus = 'tf'</code>
<code>tl</code>
开启/关闭 tab 管理
<code>tf</code>
将光标移动到 tab 管理窗口
<code>" airline ------------------------------</code>
<code>let g:airline_powerline_fonts = 1</code>
<code>let g:airline_theme = 'bubblegum'</code>
<code>"let g:airline#extensions#tabline#enabled = 1</code>
<code>"let g:airline#extensions#tabline#left_sep = ' '</code>
<code>"let g:airline#extensions#tabline#left_alt_sep = '|'</code>
<code>let g:airline#extensions#whitespace#enabled = 1</code>
<code>" to use fancy symbols for airline, uncomment the following lines and use a</code>
<code>" patched font (more info on the readme.rst)</code>
<code>if !exists('g:airline_symbols')</code>
<code>let g:airline_symbols = {}</code>
<code>let g:airline_left_sep = ''</code>
<code>let g:airline_left_alt_sep = ''</code>
<code>let g:airline_right_sep = ''</code>
<code>let g:airline_right_alt_sep = ''</code>
<code>let g:airline_symbols.branch = ''</code>
<code>let g:airline_symbols.readonly = ''</code>
<code>let g:airline_symbols.linenr = ''</code>
支持特性
可以显示分支,语法静态检查结果等。
在这份配置中写了个小函数根据新建的不同类型的文件,自动插入头部,支持<code>python</code>、<code>ruby</code>、 <code>bash</code>等。
此功能需要有 node 环境支持,可以执行 <code>npm -g install instant-markdown-d</code> 进行安装。
<code>" vim-markdown ------------------------------</code>
<code>" disabled automatically folding</code>
<code>let g:vim_markdown_folding_disabled=1</code>
<code>" letex math</code>
<code>let g:vim_markdown_math=1</code>
<code>" highlight yaml frontmatter</code>
<code>let g:vim_markdown_frontmatter=1</code>
<code>" vim-instant-markdown -----------------</code>
<code>" if it takes your system too much, you can specify</code>
<code>" let g:instant_markdown_slow = 1</code>
<code>" if you don't want to manually control it</code>
<code>" you can open this setting</code>
<code>" and when you open this, you can manually trigger preview</code>
<code>" via the command :instantmarkdownpreview</code>
<code>let g:instant_markdown_autostart = 0</code>
<code>:instantmarkdownpreview</code>
手动触发 markdown 文件的预览
在这份配置中,可以在高亮某单词时,通过使用 <code>ctrl-n</code> 或者 <code>ctrl-p</code> 进行多游标选择,然后进行编辑或修改等操作。
在这份配置中,可以通过使用<code>,r</code>进行全文查找或者<code>,r</code>进行快速查找,或者在当前字符串上使用<code>,wr</code>以及<code>,wr</code>来进行全文查找或者快速查找。
完备的 python 支持,可以自动识别当前是系统环境或虚拟环境,使用<code>:isort</code>可智能对导入包进行排序,使用<code>:pymodelintauto</code>可自动格式化。
原文发布时间为:2017-01-08
本文来自云栖社区合作伙伴“linux中国”