当前位置: 首页 > news >正文

Vim技能修炼教程(17) - 编译自己的Vim

摘要: 随着我们的vim知识越来越丰定,我们已经可能需要编译自己的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库的效果:

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

这些都配好了之后,我们就可以编译出一版基本上全功能的版本了:

gtk3

编译命令示例:

./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,带图形界面: ![macvim](https://yqfile.alicdn.com/625c9bf33baab9476ee975cdaa2c3a66bdd7ed81.png) 在mac上缺什么模块就用Homebrew来安装,一般不用指定,都可找到。 

 

原文链接

转载于:https://www.cnblogs.com/jzy996492849/p/7234226.html

相关文章:

  • 12306 外包给阿里巴巴、IBM 等大企业做是否可行?
  • HTTP中GET与POST的真正区别
  • “学”、“习”二合一:监督学习——支持向量机(SVM)入门
  • Halcon学习之五:有关图像的定义域的函数
  • 教你一招让网页用上漂亮的11PX中文字体
  • Xamarin XAML语言教程模板视图TemplatedView(二)
  • Mozilla “Common Voice” 开源语音识别项目
  • 物联网未来充满活力,但业界仍在探索中
  • activiti实战系列 排他网关(ExclusiveGateWay)
  • 还在用PS磨皮去皱?看看如何用神经网络高度还原你的年轻容貌!
  • 遭受勒索攻击后,勒索软件接下来做什么?
  • 30 岁: 程序员心中永远的痛?
  • 未来网络战如何打?智能机器是黑客的克星吗?
  • 如何使大数据易于管理
  • 所有软件定义存储的厂商都一样么?
  • [译] 怎样写一个基础的编译器
  • avalon2.2的VM生成过程
  • canvas绘制圆角头像
  • exif信息对照
  • export和import的用法总结
  • Invalidate和postInvalidate的区别
  • IP路由与转发
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • windows下如何用phpstorm同步测试服务器
  • 初探 Vue 生命周期和钩子函数
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 浮现式设计
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端临床手札——文件上传
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​学习一下,什么是预包装食品?​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #### go map 底层结构 ####
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (循环依赖问题)学习spring的第九天
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .mysql secret在哪_MySQL如何使用索引
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net8 Blazor 尝鲜
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET的数据绑定
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .stream().map与.stream().flatMap的使用
  • @RestControllerAdvice异常统一处理类失效原因
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [14]内置对象
  • [Android Studio 权威教程]断点调试和高级调试
  • [bzoj4240] 有趣的家庭菜园
  • [BZOJ4566][HAOI2016]找相同字符(SAM)