先上疗效,给大家看效果:
首先说明,vi 和 vim 是两个不同的版本,vi是 vim 的精简版本,功能要弱很多,所以如果你的系统里面只有 vi,请执行 apt install vim
命令更新到 vim,而且最好更新到 8.0 版本。
如果你系统里面没有安装 vim,你打开 vi,看到的应该是下面这样的。
安装 vim 后,你打开 vim,看到的界面是这样的。
注意区分。
ctags 的作用是扫描工程中的代码,为代码中定义的函数、变量生成一份 tags 数据库文件,然后我们用 vim 浏览代码的的时候,当光标移动到某个函数或者变量上,只要按下Ctrl+ ] 组合按键,就会自动跳转到这个函数或者变量定义地方。
ctag 目前有两个版本:Exuberant-ctags 和 Universal-ctags,Exuberant-ctags 比较老,目前已经停止维护, Universal-ctags 测是新版本,一直在更新,功能更强大,支持的语言也更多,所以这里安装新版本。
git clone https://github.com/universal-ctags/ctags.git
cd ctags
git checkout 61cc66cf
sudo apt install gcc make pkg-config autoconf automake python3-docutils \
libseccomp-dev libjansson-dev libyaml-dev libxml2-dev
./autogen.sh
./configure
make
sudo make install
目前只能通过编译源码的方式安装,而且我发现最新的代码有问题,所以回退到了一个可用的版本。
ripgrep 是一个超级强大的命令行搜索工具,看名字就知道,它是来挑战 grep 的,它确实比 grep 好用,强大、简单,目前在 github 上超过了一万六千个 star,可见其受欢迎程度。我现在基本用它来代替了 grep 命令。vim 里面也可以用它来结合 LeaderF 插键搜索函数和变量。
这个软件目前只能通过下载软件包安装,如果你的系统版本比较新,比如 Ubuntu 18.10 或者 Debian 10,倒是可以直接通过 apt install
命令安装。
curl -LO https://github.com/BurntSushi/ripgrep/releases/download/11.0.2/ripgrep_11.0.2_amd64.deb
sudo dpkg -i ripgrep_11.0.2_amd64.deb
第一条命令是下载 ripgrep11.0.2amd64.deb 这个安装包,第二条命令是安装。
vim-pulg 是一个韩国人写的 vim 插件管理器,目前在 github 上也超过了一万六千个 star,下载安装命令如下:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
vimrc 是 vim 配置文件,通过它可以定制各种 vim 特性。
这里提供了一个最简配置的的 vimrc 在 github 上:https://github.com/andyshrk/dotvim ,下载下来放到 ~/.vim/ 目录下。
curl -fLo ~/.vim/vimrc https://raw.githubusercontent.com/andyshrk/dotvim/master/vimrc
配置比较精简, 之简单解释两个地方:
第一部分:安装了四个插件,这四个插件都是 github star 量非常高的开源项目。
第二部分:设置只有在工程项目的根目录下包含 .root 目录才会自动身材 ctags 数据库,因为如果你有一堆的大工程,都要生成数据库的话,还是蛮大。在你想深度分析的工程根目录下建立一个 .root 目录,这样有利于节省空间。
vim
然后回车。:PlugStatus
,回车,可以看到所有的插件都处于未安装状态:PlugInstall
, 回车,开始安装插键。:PlugStatus
,回车,可以看到所有固件已经处于 OK 状态。以阅读 Linux 内核代码为例:
在 Linux kernel 的根目录下建立一个 .root 文件夹:
cd linux-imx
mkidr .root
vim
可以看到,这里面不用输入准确的文件名字,只需要部分关键字,匹配度最高的文件出现在最上面,还可以通过组合键Ctrl+J或者K上下移动光标, 来选择文件,很高效吧,这是通过 Leaderf 的模糊匹配算法实现的。
光标移动到函数 syscon_regmap_lookup_by_phandle
,按Ctrl+]组合键,就跳到这个函数原型处,按Ctrl+o组合键返回。
vim 通过JK两个键上下移动光标。
按Ctrl+J或者K上下移动光标, 来选择文件,这里选了atmel-ebi.c 这个文件,然后敲Enter
键跳过去。
更多的使用技巧可以通过 Leaderf 的 github 查找,或者直接百度也能查到很多用例。