天天看点

TaoBeier 的 Vim 配置,支持 Python、Javascript、Golang 等

这是 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 &amp;&amp; tar -zxvf ctags-5.8.tar.gz &amp;&amp; cd ctags-5.8 &amp;&amp; ./configure &amp;&amp; make &amp;&amp; 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 &amp;&amp; exists("b:nerdtreetype") &amp;&amp; b:nerdtreetype == "primary") | q | endif</code>

<code>" nerdtree -----------------------------</code>

<code>" toggle nerdtree display</code>

<code>map &lt;f3&gt; :nerdtreetoggle&lt;cr&gt;</code>

<code>" open nerdtree with the current file selected</code>

<code>nmap ,t :nerdtreefind&lt;cr&gt;</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 &lt;leader&gt;e :errors&lt;cr&gt;</code>

<code>" turn to next or previous errors, after open errors list</code>

<code>nmap &lt;leader&gt;n :lnext&lt;cr&gt;</code>

<code>nmap &lt;leader&gt;p :lprevious&lt;cr&gt;</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 &lt;leader&gt;sn &lt;plug&gt;(signify-next-hunk)</code>

<code>nmap &lt;leader&gt;sp &lt;plug&gt;(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 &lt;f4&gt; :tagbartoggle&lt;cr&gt;</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>" &lt;tab&gt;: completion.</code>

<code>inoremap &lt;expr&gt;&lt;tab&gt; pumvisible() ? "\&lt;c-n&gt;" : "\&lt;tab&gt;"</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 &lt;expr&gt;&lt;c-g&gt; neocomplcache#undo_completion()</code>

<code>inoremap &lt;expr&gt;&lt;c-l&gt; neocomplcache#complete_common_string()</code>

<code>" &lt;c-h&gt;, &lt;bs&gt;: close popup and delete backword char.</code>

<code>inoremap &lt;expr&gt;&lt;c-h&gt; neocomplcache#smart_close_popup()."\&lt;c-h&gt;"</code>

<code>inoremap &lt;expr&gt;&lt;bs&gt; neocomplcache#smart_close_popup()."\&lt;c-h&gt;"</code>

<code>inoremap &lt;expr&gt;&lt;c-y&gt; neocomplcache#close_popup()</code>

<code>inoremap &lt;expr&gt;&lt;c-e&gt; neocomplcache#cancel_popup()</code>

<code>&lt;tab&gt;</code>

使用 tab 键进行待提示项目选择

<code>&lt;c-g&gt;</code>

取消补全

<code>&lt;c-l&gt;</code>

完成待补全项中共同的字符串

<code>&lt;c-h&gt;</code>

关闭待选项

<code>&lt;c-y&gt;</code>

<code>&lt;c-e&gt;</code>

退出待选项

<code>&lt;bs&gt;</code>

<code>" window chooser ------------------------------</code>

<code>" mapping</code>

<code>nmap - &lt;plug&gt;(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中国”