上一篇日志已经step by step地实录了如何在本机mac上配置vim开发环境已经各种插件。

有了一定经验之后,开始在实验室远程server上centos6.4的环境下配置vim环境。

这台机器是内网服务器连外网比较麻烦,考虑到将来在公司配置开发机环境也是基本不能联网的,所以就当提前适应了吧。

这里把遇到的一些关键点记录下来,以便后续查阅。

编译vim74

  由于YouCompleteMe插件需要vim7.3高版本支持;而server上的vim是7.2的,比较旧了。因此还是要重新编译vim74。

  这里主要遇到两个问题:

  1. 安装依赖ncurses-devel

  2. 编译安装pythong2.7.6

    (1)注意配置shared选项(http://taoo.iteye.com/blog/1826912

    (2)如果最后提示编译python的时候失败,需要查看需要缺了哪些库导致的(http://www.111cn.net/sys/CentOS/66072.htm 比如,缺少zlib,一些功能模块的编译就会fail

  3. 执行./configue的时候需要检查各项是否都能支持(比如,一编译到perl相关的项目就出问题,索性我就把--enable-perlinterp这个选项去掉了

  4. make一般不要root权限,但是make install就得需要root权限了,因为需要修改/usr/bin这类的东西

不用编译的vim插件

  这些插件大体上可以直接从本机直接文件夹平移到server上面。但是还是有些插件运行要依赖python的包。比如,刚编译好vim74并把一些插件直接放到bundle下面之后,打开vim,发现老提示import XXX失败(比如,ultisnips这个插件,老提示找不到这找不到那的)。

  一个可行的解决办法就是在.bash_profile中加一句话:

export LD_LIBRARY_PATH=/usr/local/lib

  随后就不报错了,原因是找到了各种lib库了。

  之前实习的时候,一般在开发机上运行python代码,经常把python的环境直接也传到开发机上面,然后再设置下LD_LIBRARY_PATH就OK了。

 

编译YouCompleteMe(YCM)

  由于不能联网,编译安装YCM的时候真是吃了不少苦头。

  1. 由于编译ycm共享库的时候用到了cmake,因此先在服务器上安装cmake

    (http://www.cnblogs.com/zhoulf/archive/2013/02/03/2890717.html

  2. 编译到某个步骤,遇到了/usr/bin/ld的问题,找到了这篇帖子解决(https://groups.google.com/forum/#!topic/cloudi-questions/-vDPvKYRsM4)。就是看到了这个帖子,才知道了是python编译的时候如果没有选择shared这个选项,是不会产生共享库的。后面必须把编译过程认真学一遍,否则以后这种问题会层出不穷,耗费大量精力。

  3. 如果是正经的安装,是需要先编译clang+llvm,再编译安装YCM的。而要想编译clang+llvm,又得要求gcc的版本,太麻烦了,就没有去折腾了。退而求其次,选择了一个linux的预编译的clang+llvm的pre-built包直接用了。(后面遇到的部分妖人问题也是由于这个)。

  4. 编译安装YCM除了需要make ycm_support_libs之外,还需要在YCM的目录下执行./install --clang-completer才能利用libclang来执行semantics的C-family的补全。更严重的是,如果不执行./install,打开vim后会一直报YCM server shut down的错误。这个问题也折腾了最久。最后由于不能联网,所以没有添加--clang-completer这个选项,结果补全的内容不带有参数。

  5. 在4中查错的时候,进一步了解了YCM是C/S结构的,因此在/tmp/ycmd下面可以查看错误日志输出,用以定位问题。

一些小问题

   刚弄好,直接打开vim,发现delete按键不好使;当时略慌,以为什么又弄错了,甚至一度想放弃YCM了,回到原来的环境算了。后来镇定下来google了一下,发现这种按键的作用在vim中是可以配置的。以后凡是遇到vim中按键跟正常不一样的,就可以去google修改那些配置。

最后,除了YCM的semantic有些问题,其余的插件都正常使用。对比效果如下

(1)server上的补全效果:

  

(2)mac上的补全效果:

   

可以看到二者的补全上是有差异的。这个问题有些纠结,暂时还么有解决。

我分析可能有两个原因:

(1)clang+llvm的预编译包的问题。我在centos上用的clang+llvm预编译包(http://llvm.org/releases/download.html)不是针对centos的,因此可能有些补全上的问题;而本机mac上用的clang+llvm就是与mac配套的,所以就把参数信息显示全了。如果要想在clang+llvm这个环节没有问题,最好的办法就是在server上重新编译一下clang+llvm的包(具体编译的方法参照http://ilovers.sinaapp.com/article/centos下安装llvmclang)。但是这个编译安装,还需要gcc4.7以上的环境,如果这个也改就太折腾了;而且server还不是我一个人用,玩儿坏了还影响其他人;因此最后就没动gcc,也就没有编译clang+llvm。

(2)YCM的./install时候少了参数--clang-completer这个参数。参考ycm作者的git(https://valloric.github.io/YouCompleteMe/),参见其中full installation guide的部分:

  

  我自己在执install.sh的时候,没有加入“--clang-completer”这个选项。原因还是server上没有clang,且gcc版本太低。可能这个也是么有semantic support的主动原因。

  PS : 通过上面的安装经历,以后再遇到这种插件的编译安装,最好直接去作者的主页去看full installation guide;以作者的full guide为主,再google其他人的安装经验;因为每个人的机器环境是不同的,而一般作者在full guide的时候会考虑到这个因素。

【vim环境配置】在centos6.4上配置vim的一些零碎记录的更多相关文章

  1. 【tmux环境配置】在centos6.4上配置tmux

    我学习tmux的动力如下: (1)tmux大法好.原因是被同学安利过tmux. (2)多个terminal下ssh到开发机太麻烦.还是之前实习的时候,总要开N个terminal去ssh开发机,这种东西 ...

  2. centos6.5上配置apache + mysql + php4.4.9 + eaccelerator-0.9.5 + postgresql-8.3.13 备忘

    1.apache + mysql 直接利用 yum 安装 yum -y install httpd httpd-devel mysql mysql-server httpd-manual mod_pe ...

  3. Linux 上配置 AG

    SQL Server Always On Availability Group 配置步骤:配置三台 Linux 集群节点创建 Availability Group配置 Cluster Resource ...

  4. Linux 上配置 SQL Server Always On Availability Group

    SQL Server Always On Availability Group 配置步骤:配置三台 Linux 集群节点创建 Availability Group配置 Cluster Resource ...

  5. [七月挑选]树莓派Raspberrypi上配置Git

    title: 树莓派Raspberrypi上配置Git 树莓派Raspberrypi上配置Git. 开始 首先你得有一树莓派!!! 过程 查看自己树莓派的版本 pi@raspberrypi:~ $ u ...

  6. zabbix--------配置邮件报警功能---服务器上配置---------

    --------配置邮件报警功能---服务器上配置--------- [www.aa.com@ ~]# yum install mailx -y [www.aa.com@ ~]# vi /etc/ma ...

  7. Linux c++ vim环境搭建系列(0)——简介

    vim 学习 简介: 源码编译使用vim及其插件. 内容包含: vim的编译安装, llvm clang的编译安装, 插件youcompleteme的编译安装使用, 以及vim其他插件的使用. 搭建环 ...

  8. CentOS6.5上golang环境配置

    CentOS6.5上golang环境配置 一.下载和解压go环境包 >>cd /usr/local/src/ >>wget -c http://golangtc.com/sta ...

  9. 【vim环境配置】解决ubuntu上 由YouCompleteMe插件配置不当引起的 自动补全失效的问题

    背景: 由于不可抗拒的原因,学习环境由之前centos的一台机器上,变成了ubuntu的一台机器上.因此,需要在新的ubuntu的机器上再配置一次vim环境.算起来这已经是第三次配置vim环境了(ma ...

随机推荐

  1. Spring MVC框架下提交Date数据无法在controller直接接收

    主要有两步,controller中添加initBinder方法,再创建一个时间类型数据转换类就OK了. 1.在Controller中创建方法: // 相关包 import java.text.Date ...

  2. webpack了解

    一.理解webpack 什么是webpack? 是一个模块打包器.它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform).打包 ...

  3. 如何在linux服务器部署Rstudio server,配置ODBC远程访问win 服务器上的SQL server

    如何在linux服务器部署Rstudio server,配置ODBC后通过RODBC包远程访问SQL server 背景介绍:之前写过一篇文章,提到近期要部署Rstudio server(搭建数据分析 ...

  4. python之字典的书写

    python之字典 1.字典的说明定义:字典是另一种可变容器模型,且可存储任意类型对象,他是由key:value键值对组成的. 2.字典的代码2.1.字典的定义 >>> a = di ...

  5. C#如何使用异步编程【BeginInvoke/EndInvoke】

    怎么使用异步,就是用委托进行处理,如果委托对象在调用列表中只有一个方法,它就可以异步执行这个方法.委托类有两个方法,叫做BeginInvoke和EndInvoke,它们是用来异步执行使用. 异步有三种 ...

  6. POJ2409 Let it Bead(Polya定理)

    Let it Bead Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6443   Accepted: 4315 Descr ...

  7. Java分享笔记:Map集合(接口)的基本方法程序演示

    package pack02; import java.util.*; public class MapDemo { public static void main(String[] args) { ...

  8. http2.2配置

    http: 超文本传输协议,工作在应用层 CentOS 6程序环境:httpd-2.2 配置文件: /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.con ...

  9. JavaWeb各大组件生命周期

    JavaWeb各大组件生命周期 servlet生命周期 服务器打开:在第一次请求时实例化与初始化:然后进行服务:最后服务器关闭销毁 Cookie生命周期:存储在客户端 如果不设置过期时间,则表示这个c ...

  10. Java OOP——JAVA关键字与保留字说明及使用

    1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. - ...