Vim技能修炼教程(17) - 编译自己的Vim
编译自己的Vim
前面我们已经对Vim有比较丰富的了解了。我们也知道Vim有很多编译时的选项,很多功能依赖于这些编译选项。其中最重要的就是脚本语言的支持,很多发行版本是不全的。为了支持我们所需要的功能,我们需要编译自己的Vim.
首先我们要下载Vim的源代码:
git clone https://github.com/vim/vim.git
Linux上编译Vim
以Ubuntu为例,首先要安装一些库的开发包,例:
sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev libgtk2.0-dev libatk1.0-dev libbonoboui2-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev ruby-dev mercurial
图形化界面支持
GUI已经统治世界了,GUI会给用户带来方便,我们后面也会讲菜单的用法。首先,我们需要能编译出带GUI的版本。
enable-gui支持下面一些选项:
* auto: 由vim自动选择
* no: 没有gui
* gtk2
* gtk3
* gnome2
* motif
* athena
* neXtaw
* photon
* carbon
我们首先试试使用motif库的效果:
实现步骤:
1. 首先安装motif库。
2. 然后安装motif-dev库。
3. configure –enable-gui=motif
如何安装motif库呢,我们以ubuntu 12.04为例,首先启动vim,执行下面的命令
:read !apt-cache search motif
然后我们在结果里面看到了libmotif4和libmotif-dev,分别用:!sudo apt-get install去安装它们就好。
然后执行:
configure --enable-gui=motif
make
运行src/vim -g,就可以看到motif界面的vim啦。
同样的方法,我们可以用来生成gtk2,gtk3, gnome2等界面风格。
扩展语言的支持
Vim目前一共支持7种扩展语言:
* lua: Lua语言
* perl:Perl语言
* python:Python语言2.x版本
* python3:Python语言3.x版本
* tcl:Tcl语言。
* ruby: Ruby语言
* mzscheme: Racket语言,是Scheme语言的一种方言。
支持这些语言需要三步曲:
1. 安装语言本身。要支持一门语言,连语言都不安装说不过去哈
2. 安装语言的开发包。vim需要头文件和开发库
3. configuration打开支持选项
对于需要指定语言路径的,可能还需要第4步。
我们以perl为例来说明:
第一步,安装perl:
sudo apt-get install perl
或
sudo apt-get install perl6
第二步,安装perl的开发库:
sudo apt-get install libperl-dev
第三步,重新配置并编译
./configure --enable-perlinterp
这些都配好了之后,我们就可以编译出一版基本上全功能的版本了:
编译命令示例:
./configure --enable-gui=gtk3 --enable-python3interp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-mzschemeinterp --enable-perlinterp --with-vim-name=vim8
Mac上编译vim
在Mac上,我们需要一个定制的版本MacVim:https://github.com/macvim-dev/macvim。
enable-gui时不用指定,默认就好。
命令例:
./configure --enable-gui --enable-pythoninterp --enable-python3interp --enable-perlinterp --enable-mzschemeinterp --enable-rubyinterp --enable-cscope --enable-tclinterp --enable-luainterp --with-lua-prefix=/usr/local/Cellar/lua/5.2.4_4/
编译之后会生成Vim.app,带图形界面:
在mac上缺什么模块就用Homebrew来安装,一般不用指定,都可找到。
Vim技能修炼教程(17) - 编译自己的Vim的更多相关文章
- Vim技能修炼教程(2) - 语法高亮速成
语法高亮速成 我们继续在人间修行Vim技能之旅.上一次我们学习了如何通过vundle安装插件,这次我们迅速向写插件的方向挺进. 我们先学习一个最简单的语法高亮插件的写法. 语法高亮基本上是由三部分组成 ...
- Vim技能修炼教程(12) - Vim的脚本语言支持
Vim的脚本语言支持 本节开始,我们正式接触vimscript这门古老的脚本语言. 首先要说明,vim支持的扩展语言很多,比如python, python3, ruby, lua,tcl等常见脚本语言 ...
- Vim技能修炼教程(10) - 代码跳转
程序员功能 前面我们用了5讲的篇幅来讲基本编辑的基本功:第4讲是基本操作,第5讲是操作符,第6讲行编辑ex命令,第7讲可视模式,第8讲多窗口,第9讲缓冲区和标签页. 从这一讲开始,我们从通用功能向程序 ...
- Vim技能修炼教程(16) - 浮点数计算函数
浮点数计算函数 这一节的所有函数,只有在vim编译时支持了+float时才有效. 三角函数 sin() : sine正弦函数 cos() : cosine余弦函数 tan() : tangent正切函 ...
- Vim技能修炼教程(15) - 时间和日期相关函数
Vimscript武器库 前面我们走马观花地将Vimscript的大致语法过了一遍.下面我们开始深入看一下Vimscript都给我们准备了哪些武器.如果只用这些武器就够了,那么就太好了,只用Vimsc ...
- Vim技能修炼教程(13) - 变量
VimScript变量 上节我们介绍了Python和Ruby来编写Vim插件的方式. 不过,Python和Ruby并不是所有的Vim都支持的功能,如果以最小依赖的原则来说,还是原汁原味的Vimscri ...
- Vim技能修炼教程(8) - 多窗口
多窗口 如果一个vim只能开一个窗口,那肯定是有点low.尤其是写代码的时候,打开多个文件是经常的需求. 速成教程 横着切成两个 :split 文件名 上下切换窗口 Ctrl-W加上上下键,可以实现上 ...
- Vim技能修炼教程(3) - 语法高亮进阶
语法高亮进阶 首先我们复习一下上节学到的三个命令: * syntax match用于定义正则表达式和规则的对应 * highlight default定义配色方案 * highlight link将正 ...
- Vim技能修炼教程(1) - 使用vundle管理插件
世界上有两个伟大的编辑器:一个是emacs,一个是vi.它们从诞生以来,一直在Unix/Linux世界得到最广泛的支持. 尽管过了几十年,在Windows平台上和跨平台上有层出不穷的后起之秀不断挑战它 ...
随机推荐
- spark mllib和ml类里面的区别
mllib是老的api,里面的模型都是基于RDD的,模型使用的时候api也是有变化的(model这里是naiveBayes), (1:在模型训练的时候是naiveBayes.run(data: RDD ...
- Sql Server CPU 性能排查及优化的相关 Sql
Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使 ...
- [华为]输出单向链表中倒数第k个结点
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_ ...
- Django 模型(数据库)
Django 模型(数据库) ) email = models.EmailField() memo = models.TextField() def __unico ...
- Saltstack入门
一.Salt概述 一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行). 一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点 ...
- c#通过webrequest请求远程http服务时出现的问题
用WebRequest和WebClient,两种方式,请求一个由http服务发布的应用,结果出现异常. 有三种,1.System.Net.WebException: 服务器提交了协议冲突. Secti ...
- zoj3696Alien's Organ (二项分布,泊松分布求近似值)
/*二项分布即重复n次的伯努利试验,每次发生的概率一样,假设成功的概率是p,那么失败的概率就是1-p: 二项分布的概率公式:试验中发生K次的概率是 P(ξ=K)= C(n,k) * p^k * (1- ...
- git使用多个SSH公钥信息
常常在开发环境存在多个git库,比如官方的github.公司搭建的gitlab.自己的私人库等等多个git库,为了方便使用,git需要配置多个SSH公钥信息. 在centos7.5下,进入用户目录,以 ...
- Tomcat灵活配置多项目,多端口,多域名,多虚拟目录
Tomcat的配置都在Tomcat的安装目录的conf文件夹下的server.xml文件 最初内容:(去掉所有注释) <?xml version="1.0" encoding ...
- HDU 3709 Balanced Number(数位DP)题解
思路: 之前想直接开左右两边的数结果爆内存... 枚举每次pivot的位置,然后数位DP,如果sum<0返回0,因为已经小于零说明已经到了pivot右边,继续dfs只会越来越小,且dp数组会炸 ...