由于公司服务器 vim 太老, 而自己想要用新版的 vim, 但没有去 root 权限没法安装, 也没法编译 vim 源码. 于是在虚拟机下安装 vim 再拷贝到服务器.
找个与服务器相同的 linux 版本安装到虚拟机上, 如服务器是 ubuntu18.04 的就在虚拟机上安装 ubuntu18.04, 然后开始编译源码, 编译源码可以参考 Ubuntu 18.04 下编译安装 vim 8.1.
编译前要特别注意 configure 时, 要配置 `-prefix=` 为服务器上所要拷贝至的路径, 因为生成最后的 vim 二进制文件会依照 `-prefix=` 的参数去找配置文件. 如你服务器上所要存放 vim 二进制的路劲是 /home/user1/.local/vim, 那么你在虚拟机中就得建个同样路径的目录, 然后 configure 时 `-prefix=/home/user1/.local/vim`, 否则会有类似如下错误:
[~/.local/vim/bin]$ ./vim
Error detected while processing /work/user1/.vimrc:
line 6:
E484: Can't open file /home/user1/vim/share/vim/syntax/syntax.vim
line 7:
E484: Can't open file /home/user1/vim/share/vim/syntax/syntax.vim
failed to load colors/lists/default.vim
Press ENTER or type command to continue
最好还给做下 `sudo chmod 777 /home/serverxxx/.local/vim`, 以免拷贝到服务器时出现权限的问题.
我这里安装的是 vim8.2, 在服务器上还会报库缺失的错误,
[~]$ vim
vim: error while loading shared libraries: libcanberra.so.0: cannot open shared object file: No such file or directory
这时在虚拟机中到对应库的位置:
[/home/user1/.local/vim/bin]$ ldd ./vim | rg -F 'libcanberra.so.0'
libcanberra.so.0 => /usr/lib/x86_64-linux-gnu/libcanberra.so.0 (0x00007f8f0b5f0000)
[/home/user1/.local/vim/bin]$ ll /usr/lib/x86_64-linux-gnu/libcanberra.so.0
lrwxrwxrwx 1 root root 20 Dec 3 2017 /usr/lib/x86_64-linux-gnu/libcanberra.so.0 -> libcanberra.so.0.2.5
[/home/user1/.local/vim/bin]$ ldd ./vim | rg -F 'libvorbisfile.so.3'
libvorbisfile.so.3 => /usr/lib/x86_64-linux-gnu/libvorbisfile.so.3 (0x00007fd269fc1000)
[/home/user1/.local/vim/bin]$ ll /usr/lib/x86_64-linux-gnu/libvorbisfile.so.3
lrwxrwxrwx 1 root root 22 Mar 16 2018 /usr/lib/x86_64-linux-gnu/libvorbisfile.so.3 -> libvorbisfile.so.3.3.7
把对应缺失的库拷贝到服务器中的 /home/user1/.local/lib/x86_64-linux-gnu/,
[~/.local/lib/x86_64-linux-gnu]$ exa -l --no-user
lrwxrwxrwx 20 6 Nov 22:47 libcanberra.so.0 -> libcanberra.so.0.2.5
.rw-r--r-- 72k 4 Dec 2017 libcanberra.so.0.2.5
lrwxrwxrwx 22 6 Nov 22:52 libvorbisfile.so.3 -> libvorbisfile.so.3.3.7
.rw-r--r-- 31k 17 Mar 2018 libvorbisfile.so.3.3.7
并在 ~/.bashrc 加上 export LD_LIBRARY_PATH=/home/user1/.local/lib/x86_64-linux-gnu/