先上疗效,给大家看效果:
不知道 CSDN 抽了什么封,这张外链的 gif 动图硬是加载不上来,大家直接点击这个链接看效果吧: Vim Fly
首先说明,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
第一条命令是下载 ripgrep_11.0.2_amd64.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 量非常高的开源项目。
LeaderF 主要用来提供高效的搜索:https://github.com/Yggdroot/LeaderF
vim-gutentags 自动生成 tags 数据库 :https://github.com/ludovicchabant/vim-gutentags
fzf 也是提供强大的搜索功能,可以和 Leaderf 互补: https://github.com/junegunn/fzf
第二部分: 设置只有在工程项目的根目录下包含 .root 目录才会自动身材 ctags 数据库,因为如果你有一堆的大工程,都要生成数据库的话,还是蛮大。在你想深度分析的工程根目录下建立一个 .root 目录,这样有利于节省空间。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8r8rEA4i-1573173809819)(https://andyshrk.gitee.io/imgrepo/VIM/VIM-plug-install.gif)]
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 通过 J K 两个键上下移动光标。
操作录屏请点击它——》动图效果
按Ctrl + J 或者 K 上下移动光标, 来选择文件,这里选了atmel-ebi.c 这个文件,然后敲 Enter
键跳过去。
操作录屏请点击它——》动图效果
这里直接用了 LeaderfFunction
这个命令,也可以定义成快捷键。
更多的使用技巧可以通过 Leaderf 的 github 查找,或者直接百度也能查到很多用例。