我的vim插件配制

安装vim

直接apt-get或yum install,若最新版可能需自行编译,不用卸载旧版也可

1.通过git下载vim最新版

git clone https://github.com/vim/vim.git
2. 解决vim的依赖问题

sudo yum install -y ncurses-devel

yum install gcc gcc-c++ cmake python-devel //也很重要,必须更新gcc版本不然编译完vim可能还是不支持python
3. 编译安装(选项请参考手册)

cd vim/src
为使用YouCompleteMe需支持python

./configure --with-features=huge --enable-python3interp=yes --enable-pythoninterp=yes --with-python-config-dir=/usr/lib64/python2.7/config --enable-rubyinterp=yes --enable-luainterp=yes --enable-perlinterp=yes --with-python3-config-dir=/usr/lib64/python3.6/config-3.6m-x86_64-linux-gnu --enable-multibyte --prefix=/usr/local

make
sudo make install

安装YCM

Ubuntu 14.04及以上安装YCM

sudo apt-get install vim-addon-manager
sudo apt-get install vim-youcompleteme
vim-addons install youcompleteme

CentOS安装YCM

1.下载Vundle和YouCompleteMe插件

输入以下指令,下载Vundle

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
下载成功后,在用户根目录下面,修改.vimrc文件,追加下面语句以便后续安装YouCompleteMe插件

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin ‘gmarik/Vundle.vim’
Plugin ‘Valloric/YouCompleteMe’
call vundle#end()
filetype plugin indent on

然后在vim中先按Esc建,并且输入以下指令安装插件:
:PluginInstall

1.2.编译YouCompleteMe

在编译之前下载编译工具,准备编译YouCompleteMe

yum install gcc gcc-c++ cmake python-devel
编译YouCompleteMe使其支持C/C++ 自动补全

cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer

安装常见问题

报错:**No .ycm_extra_conf.py file detected, so no compile flags are available. Thus no semantic support for C/C++/ObjC/ObjC++.**需要添加.ycm_extra_conf.py文件的路径,一般默认在~/.vim/bundle/YouCompleteMe下。
只需在~/.vimrc中加入下一句:
let g:ycm_global_ycm_extra_conf=’~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py’

然后进入vim,可能会发现没有关键词提示,还报错YCM AttributeError: ‘module’ object has no attribute ‘FlagsForFile’
需要在.ycm_extra_conf.py的最后加入以下函数,注意python要顶格写。
#Add your flags to this list.
flags = [
‘-isystem’,
‘/usr/include’,
‘-isystem’,
‘/usr/include/c++/4.8.2’,
‘-isystem’,
‘/usr/include’,
‘/usr/include/x86_64-linux-gnu/c++’,
]

def FlagsForFile(filename):
return {‘flags’: flags}

配置文件:

Plugin 'Valloric/YouCompleteMe'

# 手动设定全局C++补全配置文件
let g:ycm_global_ycm_extra_conf = '/home/zc/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py'

let g:ycm_seed_identifiers_with_syntax = 1

# 设置语义补全触发器,这里设置为只要输入两个字符就触发
let g:ycm_semantic_triggers =  {
                        \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
                        \ 'cs,lua,javascript': ['re!\w{2}'],
                        \ }

#禁止ycm打开函数原型预览窗口
set completeopt=menu,menuone
let g:ycm_add_preview_to_completeopt = 0

# 文件类型白名单,只有打开这里面的文件类型时才启用ycm的补全,防止打开一些比较大的非代码文件时ycm卡住
let g:ycm_filetype_whitelist = {
                        \ "c":1,
                        \ "cpp":1,
                        \ "objc":1,
                        \ "sh":1,
                        \ "zsh":1,
                        \ "zimbu":1,
                        \ "py":1,
                        \ "java":1,
                        \ "conf":1
                        \ }

# 补全完成后自动关闭预览窗口
let g:ycm_autoclose_preview_window_after_completion = 1

# 切换到非输入模式自动关闭补全窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif

# 禁止补全时打开预览窗口
set completeopt-=previe

# 禁止ycm显示语法诊断信息,因为我用了syntastic插件来检查语法
let g:ycm_show_diagnostics_ui = 0

# 设置回车为补全确认键
let g:ycm_key_list_stop_completion = ['<CR>']

安装NERDTree

源码获取 git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree

使用Vundle.vim无需自己下载源码,插件安装过程中可能会出现fatal: unable to access ‘https://github.com/…’: Could not resolve host: github.com这个错误,这时vim /etc/resolv.conf,然后加入nameserver 8.8.8.8或者nameserver 114.114.114.114即可。

要想设置自动启动,需修改.vimrc

1.自启动
autocmd vimenter * NERDTree

2.打开空文件自启动
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists(“s:std_in”) | NERDTree | endif

3.打开目录自启动
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists(“s:std_in”) | exe ‘NERDTree’ argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif

4.将NERDTree绑定到快捷键上
map :NERDTreeToggle
如map :NERDTreeToggle,就是讲其绑定到F2上。

5.只剩NERDTree窗口时关闭vim
autocmd bufenter * if (winnr("$") == 1 && exists(“b:NERDTree”) && b:NERDTree.isTabTree()) | q | endif

安装syntastic

用Vundle直接安装,在.vimrc中添加 Plugin ‘vim-syntastic/syntastic’
然后就装好啦!

注意, 针对某些具体语言, 指定了checker, 需要对应安装外部依赖, 例如pyflakes/pep8/jshint等等

:Errors 显示错误面板
:lnext 到下一个错误
:lprevious 到上一个错误
临时手动关闭syntastic的Location List输入:lclose即可

Bundle 'scrooloose/syntastic'
let g:syntastic_error_symbol='>>'
let g:syntastic_warning_symbol='>'
let g:syntastic_check_on_open=1
let g:syntastic_check_on_wq=0
let g:syntastic_enable_highlighting=1
let g:syntastic_python_checkers=['pyflakes'] " 使用pyflakes,速度比pylint快
let g:syntastic_javascript_checkers = ['jsl', 'jshint']
let g:syntastic_html_checkers=['tidy', 'jshint']
" 修改高亮的背景色, 适应主题
highlight SyntasticErrorSign guifg=white guibg=black

" to see error location list
let g:syntastic_always_populate_loc_list = 0
let g:syntastic_auto_loc_list = 0
let g:syntastic_loc_list_height = 5
function! ToggleErrors()
    let old_last_winnr = winnr('$')
    lclose
    if old_last_winnr == winnr('$')
        " Nothing was closed, open syntastic error location panel
        Errors
    endif
endfunction
nnoremap <Leader>s :call ToggleErrors()<cr>
" nnoremap <Leader>sn :lnext<cr>
" nnoremap <Leader>sp :lprevious<cr>


"自动打开Locaton List,默认值为2,表示发现错误时不自动打开,当修正以后没有再发现错误时自动关闭,置1表示自动打开自动关闭,0表示关闭自动打开和自动关闭,3表示自动打开,但不自动关闭
let g:syntastic_auto_loc_list = 1
"修改Locaton List窗口高度
let g:syntastic_loc_list_height = 5
"打开文件时自动进行检查
let g:syntastic_check_on_open = 1
"自动跳转到发现的第一个错误或警告处
let g:syntastic_auto_jump = 1
"进行实时检查,如果觉得卡顿,将下面的选项置为1
let g:syntastic_check_on_wq = 0
"修复syntastic使用:lnext和:lprev出现的跳转问题,同时修改键盘映射使用sn和sp进行跳转
function! <SID>LocationPrevious()                       
  try                                                   
    lprev                                               
  catch /^Vim\%((\a\+)\)\=:E553/                        
    llast                                               
  endtry                                                
endfunction                                             
function! <SID>LocationNext()                           
  try                                                   
    lnext                                               
  catch /^Vim\%((\a\+)\)\=:E553/                        
    lfirst                                              
  endtry                                                
endfunction                                             
nnoremap <silent> <Plug>LocationPrevious    :<C-u>exe 'call <SID>LocationPrevious()'<CR>                                        
nnoremap <silent> <Plug>LocationNext        :<C-u>exe 'call <SID>LocationNext()'<CR>
nmap <silent> sp    <Plug>LocationPrevious              
nmap <silent> sn    <Plug>LocationNext

"关闭syntastic语法检查, 鼠标复制代码时用到, 防止把错误标志给复制了
nnoremap <silent> <Leader>ec :SyntasticToggleMode<CR>
function! ToggleErrors()
    let old_last_winnr = winnr('$')
    lclose
    if old_last_winnr == winnr('$')
        " Nothing was closed, open syntastic error location panel
        Errors
    endif
endfunction

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值