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

2017-01-09 07:55:31来源:作者:人点击

编者按:每一个 Vimer 都有一个用 Vim 打造一个完美帝国的梦想,总是会有沉迷于 Vim 及林林总总的插件中不可自拔的一段青葱岁月。让我们来看看 TaoBeier 是如何编织自己的 Vim 幻境的。

本文略有修改,欢迎大家到 GitHub 上反馈和加入对此配置的贡献。

这是 TaoBeier 精心打造的 Vim 环境配置,支持 Python、Javascript、Vue.js、Golang 和 Markdown。

安装

你需要一个有 Python 支持的 Vim 版本。请使用
vim --version | grep +python
来检查确认。

依赖

Debian/Ubuntu 平台

sudo apt-get install python vim exuberant-ctags gitsudo pip install dbgp pep8 flake8 pyflakes isort

RedHat/CentOS 平台

CentOS 6.7 的 yum 源自带的 Python 版本较旧,推荐自行安装 Python2.7。

sudo yum install python vim ctags gitsudo pip install dbgp pep8 flake8 pyflakes isort

Mac OS 平台

brew install python vim gitwget 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 installsudo pip install dbgp pep8 flake8 pyflakes isort

下载 vimrc 文件到用户主目录

wget https://raw.githubusercontent.com/tao12345666333/vim/master/vimrc -O $HOME/.vimrc

安装插件

打开 Vim,它将会自动安装插件。请耐心等待它完成。或者你可以使用下面的命令来自行安装。

vim -E -u $HOME/.vimrc +qall

享受你的 Vim 并个性化它吧!

支持特性

插件管理(Vundle)

在这份配置中,使用了 Vundle 作为插件管理器。Vundle 会自动接管
.vim
文件夹,所有配置好的插件将默认下载至
~/.vim/bundle/
, 在使用之前请确保
.vim
文件夹干净。 Vundle 的插件安装需要触发
git clone
操作,搜索需要
curl
支持。

配置(截取了部分)

" let Vundle manage VundlePlugin 'gmarik/vundle'" ============================================================================" Active plugins" You can disable or add new ones here:" Plugins from github repos:" Better file browserPlugin 'scrooloose/nerdtree'" Code commenterPlugin 'scrooloose/nerdcommenter'" Class/module browserPlugin 'majutsushi/tagbar'" Code and files fuzzy finderPlugin 'kien/ctrlp.vim'" Extension to ctrlp, for fuzzy command finderPlugin 'fisadev/vim-ctrlp-cmdpalette'" Zen codingPlugin 'mattn/emmet-vim'" Git integrationPlugin 'motemen/git-vim'" Tab list panelPlugin 'kien/tabman.vim'

支持操作

命令解释
:PluginList
列出所有插件
:PluginInstall(!)
安装/更新插件
:PluginSearch(!) foo
搜索 foo 相关的插件
:PluginClean(!)
清理未使用的插件
:PluginUpdate
更新插件

工程文件浏览(NERDTree)

在这份配置中, 使用了 NERDTree 查看文件列表。你可以在 NERDTree 中浏览和打开你文件系统中的目录或文件。还可以进行文件隐藏和过滤,设置添加书签等。在 NERDTree 窗口输入
?
可获得操作指南。这份配置中默认过滤掉了
.pyc
.git
.hg
.svn
等文件或文件夹的显示。

配置

" auto open or close NERDTreeautocmd vimenter * if !argc() | NERDTree | endifautocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif" NERDTree -----------------------------" toggle nerdtree displaymap <F3> :NERDTreeToggle<CR>" open nerdtree with the current file selectednmap ,t :NERDTreeFind<CR>" don;t show these file typeslet NERDTreeIgnore = ['/.pyc$', '/.pyo$']

支持操作

快捷键解释
F3
打开/关闭 NERDTree
,t
打开 NERDTree 并选中当前文件

语法检查(Syntastic)

在这份配置中,使用 Syntastic 插件进行语法静态检查. 包括但不限于
C/C++/Go/Python/Haskell/Ruby/JavaScript
等 。在本配置中对 JavaScript 的静态检查使用
eslint
,可以支持 ES6 及 JSX 等,细节可以参考 JSLint, JSHint 和 ESLint 的对比及 Vim 配置,想要切换检查工具只要修改对应位置即可。

配置

" Syntastic ------------------------------" show list of errors and warnings on the current filenmap <leader>e :Errors<CR>" turn to next or previous errors, after open errors listnmap <leader>n :lnext<CR>nmap <leader>p :lprevious<CR>" check also when just opened the filelet 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 = '⚠'

特性

保存时自动进行语法静态检查,方便的错误提示及灵活的可扩展性。

支持操作

快捷键解释
/e
打开错误列表
/n
移动到下一个错误位置
/p
移动到上一个错误位置

Git 支持(vim-fugitive 和 vim-signify)

在这份配置中,使用 vim-fugitive 和 vim-signify 做 Git 方面的支持。可以进行常用的 Git 操作及优雅的状态提示等(目前支持
git
hg
)。

配置

" 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 fileslet g:signify_vcs_list = [ 'git', 'hg' ]" mappings to jump to changed blocksnmap <leader>sn <plug>(signify-next-hunk)nmap <leader>sp <plug>(signify-prev-hunk)" nicer colorshighlight DiffAdd   cterm=bold ctermbg=none ctermfg=119highlight DiffDeletecterm=bold ctermbg=none ctermfg=167highlight DiffChangecterm=bold ctermbg=none ctermfg=227highlight SignifySignAdd    cterm=bold ctermbg=237  ctermfg=119highlight SignifySignDelete cterm=bold ctermbg=237  ctermfg=167highlight SignifySignChange cterm=bold ctermbg=237  ctermfg=227

支持操作

快捷键解释
:Git [args]
类似执行
git
命令一样
:Gstatus
类似
git status
。在列表中使用
-
添加/移除文件
:Gcommit [args]
类似
git commit
:Gmerge [args]
类似
git merge
:Gpull [args]
类似
git pull
:Gpush [args]
类似
git push
:Gvdiff [revision]
类似
git push
但是会切分窗口
更多详细的操作可以使用
:help fugitive


Tag 支持(Tagbar)

在这份配置中,使用了 Tagbar 做 Tag 支持,可以显示当前文件中定义的类/变量等。

配置

" Tagbar -----------------------------" toggle tagbar displaymap <F4> :TagbarToggle<CR>" autofocus on tagbar openlet g:tagbar_autofocus = 1

支持操作

快捷键解释
F4
打开 Tag 列表

超全自动补全(Neocomplcache)

在这份配置中, 使用了 Neocomplcache 作为主要的自动补全插件。

配置

" 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 = 1let g:neocomplcache_enable_ignore_case = 1" Use smartcase.let g:neocomplcache_enable_smart_case = 1let g:neocomplcache_enable_auto_select = 1let g:neocomplcache_enable_fuzzy_completion = 1let g:neocomplcache_enable_camel_case_completion = 1let g:neocomplcache_enable_underbar_completion = 1let g:neocomplcache_fuzzy_completion_start_length = 1let g:neocomplcache_auto_completion_start_length = 1let g:neocomplcache_manual_completion_start_length = 1" Set minimum syntax keyword length.let g:neocomplcache_min_keyword_length = 1let g:neocomplcache_min_syntax_length = 1let g:neocomplcache_lock_buffer_name_pattern = '/*ku/*'" complete with workds from any opened filelet g:neocomplcache_same_filetype_lists = {}let g:neocomplcache_same_filetype_lists._ = '_'" <TAB>: completion.inoremap <expr><TAB>  pumvisible() ? "/<C-n>" : "/<TAB>"" Define keyword.if !exists('g:neocomplcache_keyword_patterns')    let g:neocomplcache_keyword_patterns = {}endiflet g:neocomplcache_keyword_patterns['default'] = '/h/w*'" Plugin key-mappings.inoremap <expr><C-g>     neocomplcache#undo_completion()inoremap <expr><C-l>     neocomplcache#complete_common_string()" <C-h>, <BS>: close popup and delete backword char.inoremap <expr><C-h> neocomplcache#smart_close_popup()."/<C-h>"inoremap <expr><BS> neocomplcache#smart_close_popup()."/<C-h>"inoremap <expr><C-y>  neocomplcache#close_popup()inoremap <expr><C-e>  neocomplcache#cancel_popup()

支持操作

快捷键解释
<Tab>
使用 Tab 键进行待提示项目选择
<C-g>
取消补全
<C-l>
完成待补全项中共同的字符串
<C-h>
关闭待选项
<C-y>
关闭待选项
<C-e>
退出待选项
<BS>
关闭待选项
类 Tmux 的窗口选择(vim-choosewin)

在这份配置中,使用了 vim-choosewin 进行窗口管理器。支持类 Tmux 的操作。

配置

" Window Chooser ------------------------------" mappingnmap  -  <Plug>(choosewin)" show big letterslet g:choosewin_overlay_enable = 1

支持操作

快捷键解释
-
开启窗口选择
- [
选择上一个 tab 的窗口
- ]
选择下一个 tab 的窗口
更多操作可以使用
:help choosewin


灵活的 Tab 管理(TabMan)

在这份配置中使用了 TabMan 进行 Tab 管理,可以进行灵活切换与管理。

配置

" TabMan ------------------------------" mappings to toggle display, and to focus on itlet g:tabman_toggle = 'tl'let g:tabman_focus  = 'tf'

支持操作

快捷键解释
tl
开启/关闭 tab 管理
tf
将光标移动到 tab 管理窗口

优雅的状态栏(Airline)

在这份配置中,使用了 Airline 提供更多状态栏支持。

配置

" Airline ------------------------------let g:airline_powerline_fonts = 1let 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 = {}endiflet 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 = ''

支持特性

可以显示分支,语法静态检查结果等。

自动插入头部

在这份配置中写了个小函数根据新建的不同类型的文件,自动插入头部,支持
python
ruby
bash
等。

Markdown 实时预览(vim-instant-markdown 和 vim-markdown)

在这份配置中,使用了 vim-instant-markdown 和 vim-markdown 做 Markdown 格式的支持,可以支持实时预览等特性。

此功能需要有 node 环境支持,可以执行
npm -g install instant-markdown-d
进行安装。

配置

" Vim-markdown ------------------------------" Disabled automatically foldinglet g:vim_markdown_folding_disabled=1" LeTeX mathlet g:vim_markdown_math=1" Highlight YAML frontmatterlet 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 :InstantMarkdownPreviewlet g:instant_markdown_autostart = 0

支持操作

快捷键解释
:InstantMarkdownPreview
手动触发 markdown 文件的预览

多游标选择、编辑等

在这份配置中,可以在高亮某单词时,通过使用
Ctrl-n
或者
Ctrl-p
进行多游标选择,然后进行编辑或修改等操作。

快速文件查找

在这份配置中,可以通过使用
,R
进行全文查找或者
,r
进行快速查找,或者在当前字符串上使用
,wR
以及
,wr
来进行全文查找或者快速查找。

快速注释

使用 NERDCommenter 插件完成快速注释,可以通过
/ci
进行快速注释。

Python 支持

完备的 Python 支持,可以自动识别当前是系统环境或虚拟环境,使用
:Isort
可智能对导入包进行排序,使用
:PymodeLintAuto
可自动格式化。

总结

除了上述列出的功能以外,还有很多方便的特性,可以大大提升效率,在使用中慢慢体会吧!有问题可以在tao12345666333/vim on github 提 issue 。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台