V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JoiT
V2EX  ›  Vim

Linux 下源码编译安装 vim 8.1

  •  
  •   JoiT · 2018-08-28 13:47:46 +08:00 · 8893 次点击
    这是一个创建于 2307 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用。当我们需要远程操作一台 linux 服务器的时候,只能使用命令行,这意味着如果你需要编辑文本,就只能用命令行编辑器。流行的编辑器有 vim、emacs、nano,其中最简单易用的是 nano,vim 次之,最困难的是 emacs。如果说谁最好用,那没有的,编辑器没有好不好用的说法,只有使用者是否习惯它的思维,编辑器是真的有它自己的想法的,你得顺着它的思路走。

    背景

    那为什么非得从源码编译安装 vim 呢?原因是 vim 可以支持很多特性,可以自由开启和关闭,但这只能是从源码编译安装才可以做到。而操作系统自带的 vim 往往只开启了很少的特性,无法满足我们日常变成的需求,比如我需要它开启支持 python 3 的特性,那我只能先卸载操作系统自带的 vim,然后自己编译安装。

    下面展示一些示例,给大家看一下。

    首先是我的服务器上的自带 vim:

    其次是我自己的日常 vim

    任务

    完美地从源码编译安装 vim 8.1

    安装

    声明:本文所述的安装方法参考自 Google 开源项目 YouCopleteMe,在它的 wiki 页可以找到。地址: https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source

    本文所述的安装方法已经可满足绝大多数的日常 vim 使用需求了

    环境:

    • 操作系统:archlinux
    • shell:zsh
    • 适用于 archlinux、debian/ubuntu、centos/fedora (注意:都是最新或者接近最新的版本,不讨论远古系统)
    • mac 用户推荐使用 homebrew

    第一步:彻底卸载操作系统自带的 vim

    archlinux 用户:

    sudo pacman -Rsn vi vim-tiny vim vim-runtime gvim vim-common vim-gui-common vim-nox

    debian/ubuntu 用户:

    sudo apt-get remove --purge vi vim-tiny vim vim-runtime gvim vim-common vim-gui-common vim-nox

    其他发行版用户,可自行搜索卸载命令

    执行完卸载命令之后,强烈建议全局查找包含 vim 字样的文件和文件夹,手动删除,以免有漏网之鱼。如果卸载不干净,之后编译安装完了之后,很可能某种特性开启失败,导致又要重装,在任意文件夹下执行:

    sudo find / -name "*vim*" > ~/find_vim_result

    查找的结果都会在 ~/find_vim_result 中记录,你需要对照着这个记录,一个个手动去删除,但是要注意,有些是不可删除的文件,比如:

    /usr/share/libquvi-scripts/0.9.20131130/media/vimeo.lua /usr/lib/modules/4.18.3-arch1-1-ARCH/kernel/drivers/media/platform/vimc/vimc_sensor.ko.xz /usr/lib/modules/4.18.3-arch1-1-ARCH/kernel/drivers/media/platform/vimc/vimc-debayer.ko.xz /usr/lib/modules/4.18.3-arch1-1-ARCH/kernel/drivers/media/platform/vimc/vimc_scaler.ko.xz

    如果大量操作系统文件被误删,很有可能你需要重装系统,千万注意。

    第二步:克隆 vim 源代码

    在任意文件夹下执行

    git clone https://github.com/vim/vim.git

    进入 vim 项目文件夹

    cd ./vim

    第三步:安装依赖库

    archlinux 用户:

    无需安装任何依赖

    debian/ubuntu 用户:

    sudo apt 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 python3-dev ruby-dev lua5.1 liblua5.1-dev libperl-dev git

    fedora 20 用户:

    首先

    sudo yum install -y ruby ruby-devel lua lua-devel luajit luajit-devel ctags git python python-devel python3 python3-devel tcl-devel perl perl-devel perl-ExtUtils-ParseXS perl-ExtUtils-XSpp perl-ExtUtils-CBuilder perl-ExtUtils-Embed

    然后

    sudo ln -s /usr/bin/xsubpp /usr/share/perl5/ExtUtils/xsubpp

    第四步:configure vim

    ./configure --with-features=huge \
        --enable-multibyte \
        --enable-rubyinterp=yes \
        --enable-python3interp=yes \
        --with-python-config-dir=/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu \
        --enable-perlinterp=yes \
        --enable-luainterp=yes \
        --enable-gui=gtk2 \
        --enable-cscope \
        --prefix=/usr/local
    

    请注意:把 python3-config-dir 这个目录换成你自己的,就是你的操作系统自带的 python3 的 config 目录,/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu 这个是我的目录,跟你的可能不一样,请自行查找

    强烈建议你把这一条命令先复制到某个编辑器中,然后修改完路径之后,再粘贴到终端里面去执行

    在这个命令中,我们开启的主要是 ruby、python3、perl、lua,我建议你只开启 python3,如果你觉得有必要,那就只开启 python2,如果同时开启 python3 和 python2 会产生很多冲突,这个配置可以满足绝大多数的 python、go 的开发任务了。

    第五步:make

    make VIMRUNTIMEDIR=/usr/local/share/vim/vim81

    第六步:安装到系统中

    sudo make install

    第六步:查看特性是否已经开启

    vim --version

    第七步:额外说明

    建议使用 terminal 版本的 vim,不建议使用 gvim、macvim 之类的 gui

    我日常使用的 vim 都是按照这个流程来走的,满足了绝大多数的开发需求,外加装了很多插件和自己写的插件,开发 python、go 足够了,并且还可以完美的书写 markdown,胜任了一切编辑工作。但是如果要开发 .net 还是建议使用宇宙第一 IDE visual studio 或者编辑器 visual studio code

    vim 其实真不是个好东西,你会发现自己越来越懒,懒到什么程度呢?

    以前在 windows 下做开发,用 visual studio,好多快捷键再配合鼠标好方便。自从熟练使用 vim 之后,每次浏览 web 的时候一拿鼠标,我都觉得怎么这么烦!又要碰鼠标。还有最毒的一个地方:H J K L

    vim 彻底地把这四个键妖魔化了,以前不熟练的时候,我觉得明明上下左右四个箭头更快啊。后来熟练 H J K L 了之后,有时候不得不按上下左右键的时候,我会觉得好烦啊!我的手腕又要动了!又浪费了我 0.5 秒!我现在感觉,如果我的手指需要离开字母按键区域就是在浪费力气! 我很想把 Backspace 键给它扣掉!

    最神奇的一个按键:ESC

    这个键离得最远,但是我竟然对它一点都不排斥,反而觉得这个距离竟然刚刚好!每天不按它上万遍就浑身难受,这是怎么回事!


    博客

    https://www.cnblogs.com/JoiT/

    29 条回复    2018-08-29 03:32:13 +08:00
    defunct9
        1
    defunct9  
       2018-08-28 13:58:10 +08:00   ❤️ 1
    不用卸载,直接安个不同路径就好了。
    同时,必须保持两个 vim,理由很简单,如果有一天,你只有手机,想上服务器改个东西,那个花哨的 vim 就完全变成垃圾了。
    http://www.rendoumi.com/da-zao-yi-ge-hao-yong-de-vim/
    daigouspy
        2
    daigouspy  
       2018-08-28 14:00:50 +08:00 via Android
    一个编辑器搞得比操作系统都复杂
    Tumblr
        3
    Tumblr  
       2018-08-28 14:01:28 +08:00
    干货啊。
    不过,如果格式上再排一下,应该会更好。。。
    JoiT
        4
    JoiT  
    OP
       2018-08-28 14:06:04 +08:00
    @Tumblr 啊 因为是直接从我的博客里面复制过来的
    JoiT
        5
    JoiT  
    OP
       2018-08-28 14:07:03 +08:00
    @defunct9 哈哈 是的 不过服务器上我直接用包管理器装 然后写一行 set number
    JoiT
        6
    JoiT  
    OP
       2018-08-28 14:07:26 +08:00
    @daigouspy 不不 建议你用一下 arch 你会收回这句话的
    yanaraika
        7
    yanaraika  
       2018-08-28 14:18:43 +08:00   ❤️ 1
    还是 neovim 好,官方提供 AppImage 直接运行 https://github.com/neovim/neovim/releases
    xiaket
        8
    xiaket  
       2018-08-28 14:24:58 +08:00
    vim 那么臃肿的源码, 再加上这儿这么多用不到的特性编译进去, 我已经不敢想象这个二进制里是什么意面了....
    Tumblr
        9
    Tumblr  
       2018-08-28 14:41:09 +08:00
    @JoiT 嗯,回复之前,有去你博客看了。。。~~~
    agagega
        10
    agagega  
       2018-08-28 14:42:53 +08:00 via iPad
    这个编译参数对真日常用 Vim 的来说不算多啊。
    focux
        11
    focux  
       2018-08-28 14:51:24 +08:00
    好巧,终端主题一样:)
    sega97
        12
    sega97  
       2018-08-28 15:16:26 +08:00
    好文,小白问一下,打开 python3 支持可以实现什么功能呢?
    neoblackcap
        13
    neoblackcap  
       2018-08-28 15:21:01 +08:00
    @sega97 支持你用 python3 跟 vim 交互,具体请看你的插件实现
    puga2006
        14
    puga2006  
       2018-08-28 16:19:00 +08:00
    还是不太习惯 vim,做 Web 前端开发的可以用 vim,做一般大型工程的 vim 就毫无用处,很多 IDE 的功能 VIM 是完全不能实现的就算能实现也要折腾很久,我觉得没必要浪费那么多时间去做一个只不过增加了一点编码速度但实际上并没有 IDE 好用的东西。
    zhzer
        15
    zhzer  
       2018-08-28 16:24:37 +08:00
    各位可以试试 pyvim,有 python 环境就行
    JoiT
        16
    JoiT  
    OP
       2018-08-28 16:33:36 +08:00
    @puga2006 看对 vim 的熟练程度吧,我的开发工作有 95% 以上都用它完成,写文档也全用它,调编译器只要熟练了就没问题,超大型工程也不需要换。除非有时候客串一下手机客户端编写,比如小程序,那是没办法,只能用官方的开发工具。只要熟练了就可以胜任一切,ide 跟 vim 的区别本质上只是快捷键不一样,熟练程度不到家,说没有 ide 好用这是不存在的。
    itisthecon
        17
    itisthecon  
       2018-08-28 16:36:20 +08:00
    vim 一直都是自己编译的, 因为是用的最多的软件之一...
    liuxu
        18
    liuxu  
       2018-08-28 16:38:05 +08:00
    emacs 不服。
    glues
        19
    glues  
       2018-08-28 16:55:04 +08:00
    装 neovim 啊
    iwtbauh
        20
    iwtbauh  
       2018-08-28 17:32:26 +08:00 via Android
    @puga2006

    IDE 对于单一语言编程确实有一定的优势。特别是对于那些只需要机械地生产代码的情况就特别合适。但是,当语言和工具的选择多种多样,同时使用多种代码生成器、定制不同工具链和构建工具配置、依赖关系多且复杂时手工整合一套 某个编辑器+代码生成器+自动化编译工具( make, autoconf....) + 版本控制系统+其他工具(调试器、性能分析工具)的优势就非常明显了
    chenhonzhou
        21
    chenhonzhou  
       2018-08-28 17:46:41 +08:00 via Android
    terminal 什么字体
    JoiT
        22
    JoiT  
    OP
       2018-08-28 18:19:22 +08:00
    @chenhonzhou 没配,默认的
    hanxiV2EX
        23
    hanxiV2EX  
       2018-08-28 18:49:32 +08:00 via Android
    Vim 要搭配 Tmux 才能体现出一边写代码,一边看输出的效果
    PythonAnswer
        24
    PythonAnswer  
       2018-08-28 19:10:14 +08:00 via iPhone
    现在用 linux 很少删包了。
    tyfulcrum
        25
    tyfulcrum  
       2018-08-28 19:33:29 +08:00
    C+[ 比 Esc 方便些。
    JoiT
        26
    JoiT  
    OP
       2018-08-28 20:05:35 +08:00
    @hanxiV2EX 答对了,我四个 tmux 窗口一直开着
    nG29DOMuRYTWfcSr
        27
    nG29DOMuRYTWfcSr  
       2018-08-28 22:17:03 +08:00 via Android
    直接上 neovim,make && make install 完事,哪有像 Vim 这样,这么多费事。
    nG29DOMuRYTWfcSr
        28
    nG29DOMuRYTWfcSr  
       2018-08-28 22:18:29 +08:00 via Android
    不过,还是要点赞,写的不错
    NetCobra
        29
    NetCobra  
       2018-08-29 03:32:13 +08:00
    @JoiT 黑得漂亮 :-D
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2779 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:15 · PVG 22:15 · LAX 06:15 · JFK 09:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.