vim学习与我的配置

vim? 那是个什么 JB 东西?

Enjoy coding 的你,是否时常痛恨鼠标点来点去、方向键远离字母,耽误码字?可曾詈骂手动批量重复处理的痛苦?Debug 时代码上下反复跳转,令你烦闷否?别人写的编辑器设置种种不便,是否想过有一个自己私人订制的编辑器?如果你有以上苦恼,那么 vim 将是你的绝佳选择。

vim 是一个文本编辑器,素有“编辑器之神”的美名,同时它也是 Linux 尤其是服务器环境下编辑文件的主要方法。

vim 的主要特点是分模式编辑:

模式 说明 功能
Normal 正常 光标移动、阅读文件
Insert 插入 在当前光标位置插入内容,编辑文件
Visual 视觉/选择 选中、复制粘贴
Replace 替换 替换当前光标下字符

其关系如下:

我的 vim 学习路线

不幸的是 Vim 的学习曲线确实相当陡峭,最开始你会觉得非常不适应,但一旦熬过了初始阶段,你会爱上 Vim。以我而言,现在离开了 vim 的模式几乎已经快不会写材料了,前几天交作业要求 word,我保存文件居然不是Ctrl+s,而是顺手来了个:wq

我的 vim 学习路线如下:

想了解其他信息,可以参考 CSDiy 的vim 指南。当然,众所周知,学习工具的核心在于使用,用起来逢山开路遇水搭桥,才最具效率和效果,isn’t it? 现代的我们,大多数情况的代码都有 IDE,但 vim 的分模式编辑和高度定制化一定会帮我们在 Coding 之路上快马加鞭。在你的各种 IDE 里安装 vim 插件,练起来,享受 All in One 的乐趣吧!

vim 手动编译安装

vim 在许多 Linux 发行版都有预装,即使没有预装的也都可以下载到安装包进行安装。但是这里边有几个问题:

因而,我们有时会需要自己手动编译安装 vim。即以我而言,为了在 vim 上使用 GitHub Copilot 插件,根据插件文档要求,我不得不手动编译 vim。下面是我的编译过程。当前系统为 Ubuntu22.04 LTS。编译过程中主要参考以下几篇文章,在此一并致谢:

清理干净

下载的第一步当然是卸载当前系统具有的 vim 了。除此之外,由于 Python2 过于老旧,我选择不支持 Python2 仅支持 Python3 的 vim,因此也将 Python2 卸载。

sudo apt autoremove vim rvim gvim vim-runtime
sudo apt autoremove python2*

做好准备

为了编译能够支持 python3/rust/perl/lua 等语言的 vim,我们需要安装一些包。

sudo apt install -y git \
                 libatk1.0-dev \
                 libcairo2-dev \
                 liblua5.1-0-dev \
                 libncurses5-dev \
                 libperl-dev \
                 libx11-dev \
                 libxpm-dev \
                 libxt-dev \
                 lua5.1 \
                 python3-dev \
                 ruby-dev \
                 # libgtk2.0-dev

由于我的编译在服务器上运行,主要运行环境为命令行,不需要 gtk2 等图形界面的支持,因而将安装 gtk 的那一行注释掉了。在编译带有 gtk2.0 的 vim 时似乎会遇到问题:vim 源码截至目前版本(v9.0.1854)采用的 gtk 代码中的struct _GTimeVal已经被弃用,gcc 要求改用struct _GDateTime,因此编译时会报错,而且陷入死循环,编译不会终止,只能Ctrl+c杀死进程。我尚不知道如何解决。这也是我放弃支持 gtk 的原因之一。

下载源码

vim 源码可以通过其GitHub 仓库下载,也可以在其官网下载。我选择了前者。

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

# 后续处理过程都在源码目录下的src目录内进行,因而切换过去
cd vim/src
# 如果此前自己编译安装过vim,需要先卸载自己的安装并清理上次的编译文件,否则会持续报错
sudo make uninstall
sudo make distclean

开干!

configure

vim 的编译过程中,需要先运行configure脚本,该脚本会检查当前系统的环境,并以参数形式接收你需要哪些功能。可以通过./configure --help查看所有可选参数及其功能说明。我选择的参数如下:

sudo ./configure\
 --with-features=huge \
 --enable-multibyte \
 --enable-rubyinterp=dynamic \
 --with-ruby-command=/usr/bin/ruby \
 --enable-luainterp\
 --enable-python3interp=dynamic \
 --with-python3-command=/usr/bin/python3.10 \
 --with-python3-config-dir=/usr/lib/python3.10/config-3.10-x86_64-linux-gnu \
 --enable-perlinterp=dynamic \
 --enable-largefile \
 --enable-cscope \
 --with-compiledby="An Ordinary Communist weunite1848@gmail.com" \
 --enable-fail-if-missing \
 --prefix=/usr

对以上选择的参数做一简要说明:

除此之外还有一些参数,如--enable-gui=gtk2/--enable-gtk2-check/--enable-fontset等,可以根据自己的需求选择。

编译安装

编译安装过程简单到无以复加,就几句话的事。

# 编译
sudo make
# 安装
sudo make install

安装过程中可能会出现报错,如部分文件(ex/view等)已经存在,删掉该文件再重新运行命令安装便是。

安装完成后,可以在命令行中运行vim --version查看 vim 的版本信息,确认是否支持你需要的功能。

最后,将我的编译安装脚本奉上,供参考。

我的 vim 配置

网上一般的教程都说 vim 的默认配置文件为~/.vimrc。这当然是不错的,但是有一个巨大的问题:家目录是随着用户而不同的,这会导致我们以当前普通用户打开 vim 编辑文件与以 root 用户使用 vim 的观感完全不一致,就很烦。

通过查看vim –version的输出,可以发现,vim 的配置文件有几层,其中“系统 vimrc 文件”被放置在$VIM/vimrc,而$VIM/etc/vim。因此,我们可以将 vim 的配置文件放置在/etc/vim下,这样不论是普通用户还是 root 用户,都会使用这份文件,保证观感一致。另外,由于该文件位置较远,我选择在~/useful下创建软链接,方便使用。

除此之外,出于同样的目的(保证当前用户与 root 用户观感一致),建议将插件也指定一个专门的绝对路径。我放在了/home/player/useful/bundle

# 创建软链接
# 我习惯把有用的文件放在~/useful下
mkdir useful
cd useful

# 创建软链接
sudo ln -s /etc/vim /home/player/useful/vim

# 插件存放位置
mkdir bundle

设置

这里原本记录着我的旧版 vim 配置,但随着http 浏览服务器文件的完成,再保留旧版然后每隔三四个月更新一次,对于我这种没事就折腾的人来说说,就显得不那么必要了。因此,这里只简单说一下。

配置的整体结构如下:

/etc/vim
├── vimrc            # vim配置文件,负责引入不同的配置模块
└── vimrcs           # 我的配置文件夹,里边是不同的配置模块
    ├── autocmd.vim
    ├── codecmd.vim
    ├── keybind.vim
    ├── match.vim
    ├── myset.vim
    ├── plugs.vim
    └── statusline.vim

我直接把我服务器上的配置文件放在这里,以供查看。

2023.7.5
2023.9.6
2024.1.3