从源码构建Vim
从源码构建Vim
引言
事情是介样滴,因为我是个Vim 重度使用者了差不多。。
但在大部分系统上能安装到的或者自带的都是比较老的版本,可能是7.x 之类的。也或者是你需要使用到Vim 的某些特性或者功能,但别人帮你Build 好的程序并没有启用,这就很尴尬了。
所以,我们要从源代码自已构建自已的Vim.
步骤
下载运行时及源码
首先是要安装编译必要的库,这里你们看情况,有报错缺啥就补也成。
可能需要这些(我自已不用装就可以了):
sudo apt install ncurses-dev
# or
sudo apt install libncurses-dev
# or
sudo apt install libncurses5-dev \
libgtk2.0-dev \
libatk1.0-dev \
libcairo2-dev \
python-dev \
python3-dev \
git
然后是下载源码:
cd ~ && git clone https://github.com/vim/vim.git && cd vim/src
配置Vim
因为Vim 支持的功能非常多,所以你可以自已选需要的功能打开或者关闭。可以参看这里
也可以通过这个命令查看你当前的Vim 版本及功能的情况:
$ vim --version | less
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jan 19 2021 18:24:53)
macOS version - x86_64
Included patches: 1-2375
Compiled by Homebrew
Huge version without GUI. Features included (+) or not (-):
+acl -farsi +mouse_sgr +tag_binary
+arabic +file_in_path -mouse_sysmouse -tag_old_static
+autocmd +find_in_path +mouse_urxvt -tag_any_white
+autochdir +float +mouse_xterm -tcl
-autoservername +folding +multi_byte +termguicolors
-balloon_eval -footer +multi_lang +terminal
+balloon_eval_term +fork() -mzscheme +terminfo
-browse +gettext +netbeans_intg +termresponse
++builtin_terms -hangul_input +num64 +textobjects
+byte_offset +iconv +packages +textprop
+channel +insert_expand +path_extra +timers
+cindent +ipv6 +perl +title
-clientserver +job +persistent_undo -toolbar
+clipboard +jumplist +popupwin +user_commands
+cmdline_compl +keymap +postscript +vartabs
+cmdline_hist +lambda +printer +vertsplit
+cmdline_info +langmap +profile +virtualedit
+comments +libcall -python +visual
+conceal +linebreak +python3 +visualextra
+cryptv +lispindent +quickfix +viminfo
+cscope +listcmds +reltime +vreplace
+cursorbind +localmap +rightleft +wildignore
+cursorshape +lua +ruby +wildmenu
+dialog_con +menu +scrollbind +windows
+diff +mksession +signs +writebackup
+digraphs +modify_fname +smartindent -X11
-dnd +mouse -sound -xfontset
-ebcdic -mouseshape +spell -xim
+emacs_tags +mouse_dec +startuptime -xpm
+eval -mouse_gpm +statusline -xsmp
+ex_extra -mouse_jsbterm -sun_workshop -xterm_clipboard
+extra_search +mouse_netterm +syntax -xterm_save
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
defaults file: "$VIMRUNTIME/defaults.vim"
fall-back for $VIM: "/usr/local/share/vim"
上面第一行就写了版本号,而那些所有的特性就列在了下面,带 + 的是启用的了, - 号的是没启用。
如果没错的话现在我们在 vim/src 这个目录里了。
通过这个命令可以基本开启全功能:
./configure \
--with-features=huge \
--enable-multibyte \
--enable-rubyinterp \
--enable-perlinterp \
--enable-luainterp \
--enable-pythoninterp \
--with-python-config-dir=/usr/lib/python2.7/config-arm-linux-gnueabihf/ \
--enable-python3interp \
--with-python3-config-dir=/usr/lib/python3.7/config-3.7m-arm-linux-gnueabihf/ \
--enable-gui=gtk2 \
--enable-cscope \
--prefix=/usr
注意:里面两个Python 路径替换成你机器上的实际情况!
或者,你想关闭某个默认是开启的功能也可以用这样关掉:
./configure --enable-multibyte=no --enable-cscope=yes
直接写xxx=no 会关闭而xxx=yes 会开启,上面这条例子我们关了enable-multibyte, 而开启了enable-cscope.
命令运行后程序会跑很多checking, 耐心等待它跑完就行。
安装
在运行完configure 后,配置就设置好了,接下来就可以直接安装了。
make
sudo make install
你想要也可以指定位置:
sudo make VIMRUNTIMEDIR=/usr/local/share/vim/vim82
或者指定最多可运行多少jobs 以防止小机器受不了,因为不限制它会随便开:
make -j 4
在跑完make 和install 命令后,vim 应该就已经安装好了。再次查看一下版本应该就是最新的了。
如果没有变化的话,可能是因为shell 的缓存机制导致的,可以另开一个shell 或者用下面的命令更新一下缓存:
hash vim
大功告成~
从源码构建Vim的更多相关文章
- 创作gtk源码级vim帮助文档 tags
创作gtk源码级vim帮助文档 tags 缘由 那只有看到源码了.在linux源码上有个网站 http://lxr.linux.no /+trees, 可以很方面的查出相应版本的代码实现,gtk没有. ...
- 从源码Build vim以及打包.deb
How to build vim 1. Build步骤 git clone --depth https://github.com/vim/vim.git # download the source c ...
- java开源即时通讯软件服务端openfire源码构建
java开源即时通讯软件服务端openfire源码构建 本文使用最新的openfire主干代码为例,讲解了如何搭建一个openfire开源开发环境,正在实现自己写java聊天软件: 编译环境搭建 调试 ...
- Flink源码分析 - 源码构建
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee ...
- vue源码分析—Vue.js 源码构建
Vue.js 源码是基于 Rollup 构建的,它的构建相关配置都在 scripts 目录下.(Rollup 中文网和英文网) 构建脚本 通常一个基于 NPM 托管的项目都会有一个 package.j ...
- Elasticsearch源码分析 - 源码构建
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483694&idx=1&sn=bd03afe5a ...
- centos7 源码构建、安装dubbo-monitor
按照官方文档 ,发现dubbo-monitor-simple-x.x.x-assembly.tar.gz 下载不下来(地址访问不了),那么就自己下载源码构建吧. 我的zookeeper,hadoop ...
- 内核源码阅读vim+cscope+ctags+taglist
杜斌博客:http://blog.db89.org/kernel-source-read-vim-cscope-ctags-taglist/ 武特博客:http://edsionte.com/tech ...
- Vue.js 源码构建(三)
Vue.js 源码是基于 Rollup 构建的,它的构建相关配置都在 scripts 目录下. 构建脚本 通常一个基于 NPM 托管的项目都会有一个 package.json 文件,它是对项目的描述文 ...
随机推荐
- 一文搞定Samba云服务器配置(阿里云)
石头门第五话桶子入侵SERN的时候,先是PowerShell连接远程服务器,然后突然就用图形化界面显示了远程的试验报告,就是来源于Samba(大概). 抱着以上的想法才买了个服务器并且配一下samba ...
- python_selenium_键盘事件
引言 ----在实际的web测试工作中,需要配合键盘按键来操作,webdriver的 keys()类提供键盘上所有按键的操作,还可以模拟组合键Ctrl+a,Ctrl+v等. 举例: #cording ...
- JDBC连接MySQL、Oracle和SQL server的配置
什么是JDBC 我们可以将JDBC看作是一组用于用JAVA操作数据库的API,通过这个API接口,可以连接到数据库,并且使用结构化查询语言(SQL)完成对数据库的查找,更新等操作. JDBC连接的流程 ...
- 对话Apache Hudi VP, 洞悉数据湖的过去现在和未来
Apache Hudi是一个开源数据湖管理平台,用于简化增量数据处理和数据管道开发,该平台可以有效地管理业务需求,例如数据生命周期,并提高数据质量.Hudi的一些常见用例是记录级的插入.更新和删除.简 ...
- 【NX二次开发】获取用户输入的字符串uc1603
效果: 源码: extern DllExport void ufsta(char *param, int *returnCode, int rlen) { UF_initialize(); strin ...
- 【NX二次开发】通过两点创建单位向量
源码1: //生成从起点到终点的单位向量 double douPoint_Start[3] = { 10,10,10 }; double douPoint_End[3] = { 15,16,13 }; ...
- 【NX二次开发】NX内部函数,查找内部函数的方法
[NX二次开发]NX内部函数,libufunx.dll文件中的内部函数 [NX二次开发]NX内部函数,libugui.dll文件中的内部函数 [NX二次开发]NX内部函数,libuifw.dll文件中 ...
- SQL中的分组之后TOPN问题
SQL分组查询然后取每一组的前N条数据 由于SQL的不同的数据库SQL的语法有些略微不同,所以我们这里采用MySQL展示. 创建表 create table person( id ...
- 孟老板 Paging3 (二) 结合Room
BaseAdapter系列 ListAdapter系列 Paging3 (一) 入门 Paging3 (二) 结合 Room Paging3 (二) 结合Room Paging 数据源不开放, 无法 ...
- spring boot @Async异步注解上下文透传
上一篇文章说到,之前使用了@Async注解,子线程无法获取到上下文信息,导致流量无法打到灰度,然后改成 线程池的方式,每次调用异步调用的时候都手动透传 上下文(硬编码)解决了问题. 后面查阅了资料,找 ...