原创文章,欢迎指正!转载请注明~

从上周就开始想在cygwin上安装YouCompleteMe插件,按照GITHUB上的官方教程安装,由于自己的理解失误,一直搞不清是按照在windows上安装还是按照在Unix上安装,加上网络又不给力,浪费了许多时间。不断尝试后,发现在cygwin上安装与在window和Unix上安装都不完全相同,网上相关的教程几乎没有,所在在此记录一下经验和教训。

GITHUB官方安装教程:https://github.com/Valloric/YouCompleteMe#full-installation-guide

两种方法安装YouCompleteMe插件:

1. vundle安装YouCompleteMe插件,安装vundle使用git命令(cygwin自带的命令,如果没有就用cygwin的setup.exe安装一下):

  1. git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

配置vundle:打开.vimrc,添加如下内容并保存退出:

  1. """"""""""""""""""""""""""""""""""""""""""""""Vundle""""""""""""""""""""""""""""""""""
  2. set nocompatible
  3. filetype off
  4. set rtp+=~/.vim/bundle/Vundle "vundle插件下载到了~/.vim/bundle/Vundle下
  5. call vundle#rc()
  6.  
  7. Bundle 'Valloric/YouCompleteMe' "YouCompleteMe托管在github上,使用vundle安装
  8.  
  9. filetype plugin indent on
  10. """"""""""""""""""""""""""""""""""""""""""""""Vundle End"""""""""""""""""""""""""""""""

然后在vim中输入:BundleInstall。如果网速不给力的话,这个过程会比较漫长~,而且有可能安装失败。

2. 另一种方法直接安装YouCompleteMe插件:

  1. git clone https://github.com/Valloric/YouCompleteMe.git

等待下载完成后进入YouCompleteMe目录检查仓库完整性:

  1. git submodule update --init --recursive

......

等待下载完成后,执行下面命令查看cmake和clang的版本信息,我的cmak版本是3.3.2的而且没有安装clang,用cygwin自带的setup.exe安装一下,注意安装clang时要把libclang也选上:

cygwin比较快速的镜像比如:

http://mirrors.163.com/cygwin/

ftp://ftp.sjtu.edu.cn/sites/cygwin.com/pub/cygwin/

安装完成后(注意不能在安装中途退出,一定要等setup.exe提示安装完成才可以,不然可能会出现"address space needed by XXX.dll is already occupied"之类的错误):

$ cmake --version
cmake version 3.6.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

$ clang --version
clang version 3.8.1 (tags/RELEASE_381/final)
Target: x86_64-unknown-windows-cygnus
Thread model: posix
InstalledDir: /usr/bin

在~/新建目录ycm_build并进入,执行:

  1. cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

正确的结果如下:

接着执行:

  1. cmake --build . --target ycm_core --config Release

发现错误如下:

原来是没有安装Boost C++ libraries,用setup.exe安装好,重复执行上一个步骤,又发现错误:

查看/usr/include/python2.7/目录,发现缺少了许多头文件,用setup.exe安装好python-dev,重复执行上一个步骤,得到了正确的结果。至此我们可以补全C-fimily还有官方文档上说明的那些语言了。

接下来需要配置.vimrc,官方教程也有配置说明,这里我参考了其他博客:

http://blog.csdn.net/houzhuoming1/article/details/49990739

http://www.cnblogs.com/tsingke/p/5325964.html

在.vimrc中加入以下代码:

  1. """"""""""""""""""""""""""""""""""""""""""""""ycm"""""""""""""""""""""""""""""""
  2. let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra _conf.py'
  3.  
  4. set foldenable "启用折叠
  5. set foldmethod=indent "indent 折叠方式
  6. set foldlevel= " 折叠的层次,打开文件时默认不折叠
  7.  
  8. " 常规模式下用空格键来开关光标行所在折叠(注:zR 展开所有折叠,zM 关闭所有折叠)
  9. nnoremap <space> @=((foldclosed(line('.')) < ) ? 'zc' : 'zo')<CR>
  10.  
  11. " 常规模式下输入 cS 清除行尾空格
  12. nmap cS :%s/\s\+$//g<CR>:noh<CR>
  13.  
  14. " 常规模式下输入 cM 清除行尾 ^M 符号
  15. nmap cM :%s/\r$//g<CR>:noh<CR>
  16.  
  17. " Ctrl + K 插入模式下光标向上移动
  18. imap <c-k> <Up>
  19.  
  20. " Ctrl + J 插入模式下光标向下移动
  21. imap <c-j> <Down>
  22.  
  23. " Ctrl + H 插入模式下光标向左移动
  24. imap <c-h> <Left>
  25.  
  26. " Ctrl + L 插入模式下光标向右移动
  27. imap <c-l> <Right>
  28.  
  29. " Ctrl + f 光标跳转到行头
  30. imap <c-f> <ESC>
  31.  
  32. set number "显示行号
  33. set laststatus= "启用状态栏信息
  34. set cmdheight= "设置命令行的高度为2,默认为1
  35. set cursorline "突出显示当前行
  36. " set guifont=YaHei_Consolas_Hybrid:h10 "设置字体:字号(字体名称空格用下划线代替)
  37. " set nowrap "设置不自动换行
  38. set shortmess=atI "去掉欢迎界面
  39. """"""""""""""""""""""""""""""""""""""""""""""ycm End"""""""""""""""""""""""""""""""

但是打开文件后,会显示:

  1. 处理 function youcompleteme#Enable[]..50_OnBufferRead 时发生错误
  2. 17行:
  3. Traceback (most recent call last):

这是因为utf-8编码才能被YouCompleteMe插件识别,因此需要在.vimrc中设置encoding;又因为是在windows环境下,还需要设置vim用于屏幕显示的编码termencoding为GBK,不然打开文件后底端的提示会有乱码。

  1. set encoding=utf-
  2. set langmenu=zh_CN.UTF-
  3. language message zh_CN.UTF-
  4. set termencoding=GBK

最后在vim中输入:message不再显示有错误。YouCompleteMe具体的用法我也刚刚接触,而且为了打造一个足够舒适的IDE肯定还要安装其他的插件进行补充,网上对于这方面的资料也比较多了,以后慢慢去体会它的强大之处吧。

-----------------------------------------------------------------分隔线----------------------------------------------------------------------------

在另外一台机器上装这个插件时,没有打算补全C-family languages,所以直接执行~/.vim/bundle/YouCompleteMe下的install.py,出现了找不到合适的python库的问题,因此可以手动重置~/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py中CustomPythonCmakeArgs函数中的python_library和python_include变量:

  1. #python_library, python_include = FindPythonLibraries()
    python_library = '/usr/lib/libpython2.7.dll.a'
  2. python_include = '/usr/include/python2.7'

然后运行安装脚本install.py即可。

最后感谢我们产品四人小组给我的鼓励和支持,让我回想起了那时辛苦又温暖的北漂生活~

windows7 Cygwin 下安装 YouCompleteMe 插件的更多相关文章

  1. Ubuntu下如何安装YouCompleteMe插件

    Ubuntu安装YouCompleteMe插件 简介: 众所周知, Vim是一款linux下的文本编辑器, 其最基础的工作就是编辑文本,而不管该文本的内容是什么. 在Vim被程序员所使用后,其慢慢的被 ...

  2. cygwin 下安装python MySQLdb

    cygwin 下安装python MySQLdb 1) cygwin 更新 运行 cygwin/setup-x86_64.exe a 输入mysql,选择下面的包安装: libmysqlclient- ...

  3. 如何在Eclipse下安装SVN插件——subclipse

    如何在Eclipse下安装SVN插件——subclipse | 浏览:2799 | 更新:2014-09-20 22:39 1 2 3 4 5 6 分步阅读 版本控制是开发人员必不可少的工具,而SVN ...

  4. Mac下安装SVN插件javaHL not available的解决方法

    在Mac下安装Eclipse插件svnEclipse插件后,每次打开Eclipse都会弹出如下弹出框: 提示你本机缺少JavaHL Library. 选择Eclipse→偏好设置(preference ...

  5. cygwin下安装软件

    cygwin下安装软件cygwin工具安装新的软件和常见的命令windows8.1下安装Cygwin并通过apt-cyg安装软件包Cygwin利用apt-cyg安装gcc.g++.make和gdb 首 ...

  6. Win7环境下Sublime Text 3下安装NodeJS插件

    1.首先下载安装Node.JS,配置好环境变量(安装好Node.JS默认是配置好了环境变量的). 2.Sublime Text 3下安装NodeJS插件. 参考的两篇文章:http://www.cnb ...

  7. Windows7系统下安装OpenSSL攻略

    Windows7系统下安装OpenSSL攻略 http://blog.chinaunix.net/uid-20479991-id-216269.html http://my.oschina.net/s ...

  8. vim安装YouCompleteMe 插件

    要安装YouCompleteMe ,vim须支持python.看是否支持,可以在vim中:version 查看, 如果python前有+号,就是支持,减号就是不支持. 如果不支持,需要以编译安装方式重 ...

  9. Ubuntu12.04安装YouCompleteMe插件

    以前用的都是ctags+omnicomplete+acp的方式,这次换成clang自解析的方式尝试一把. 自从知道了Vundle,妈妈再也不用担心我麻烦地下插件了 0. 安装必要组件 sudo apt ...

随机推荐

  1. C++指针理解

    指针是C/C++编程中的重要概念之一,也是最容易产生困惑并导致程序出错的问题之一.利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯:指针能 ...

  2. 修改window本地hosts文件,修改域名指向

    Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Host ...

  3. Haskell语言学习笔记(70)NonEmpty

    NonEmpty(非空列表) infixr 5 :| data NonEmpty a = a :| [a] deriving (Eq, Ord) instance Functor NonEmpty w ...

  4. 【369】列表/字典的分拆, unpacking

    参考: python--参数列表的分拆 参考: List Comprehensions 当你要传递的参数已经是一个列表,调用的函数却接受分开一个个的参数,这个时候可以考虑参数列表拆分: 可以使用* 操 ...

  5. 如何使用JBDC修改数据

    1.JDBC取得数据库Connection连接对象conn, Connection conn=null;   //数据库连接对象 String strSql=null;    //sql语句对象 // ...

  6. editable : false与 readonly 的区别

    editable : false 不能输入 readonly:不可操作,只能看

  7. List of numerical libraries,Top Numerical Libraries For C#

    Top Numerical Libraries For C# AlgLib (http://alglib.net) ALGLIB is a numerical analysis and data pr ...

  8. datagridview表头全选

    参与程序http://www.codeproject.com/KB/grid/CheckBoxHeaderCell.aspx 这里老外写的一个控件,他少了委托重载的一个方法.先写一个控件 public ...

  9. C# 使用post的方式提交raw格式的数据,数据为json格式,多层嵌套

    原文地址:https://cnodejs.org/topic/539ff8a5c3ee0b5820938d60 raw方式使用的是纯字符串的数据上传方式,所以在POST之前,可能需要手工的把一些JSO ...

  10. HTTPConnectionPool(host:XX)Max retries exceeded with url

    爬虫多次访问同一个网站一段时间后会出现错误 HTTPConnectionPool(host:XX)Max retries exceeded with url '<requests.package ...