Vim setup
先上疗效,给大家看效果:
安装 Vim
首先说明,vi 和 vim 是两个不同的版本,vi 是 vim 的精简版本,功能要弱很多,所以如果你的系统里面只有 vi,请执行 apt install vim
命令更新到 vim,而且最好更新到 8.0 版本。
如果你系统里面没有安装 vim,你打开 vi,看到的应该是下面这样的。
安装 vim 后,你打开 vim,看到的界面是这样的。
注意区分。
安装 Universal-ctags
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
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-pulg 是一个韩国人写的 vim 插件管理器,目前在 github 上也超过了一万六千个 star,下载安装命令如下:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
安装 vimrc
vimrc 是 vim 配置文件,通过它可以定制各种 vim 特性。
这里提供了一个最简配置的的 vimrc 在 github 上: https://github.com/andyshrk/d... ,下载下来放到 ~/.vim/ 目录下。
curl -fLo ~/.vim/vimrc https://raw.githubusercontent.com/andyshrk/dotvim/master/vimrc
配置比较精简, 之简单解释两个地方:
第一部分:安装了四个插件,这四个插件都是 github star 量非常高的开源项目。
- LeaderF 主要用来提供高效的搜索:https://github.com/Yggdroot/L...
- vim-gutentags 自动生成 tags 数据库 :https://github.com/ludoviccha...
- fzf 也是提供强大的搜索功能,可以和 Leaderf 互补: https://github.com/junegunn/fzf
第二部分: 设置只有在工程项目的根目录下包含 .root 目录才会自动身材 ctags 数据库,因为如果你有一堆的大工程,都要生成数据库的话,还是蛮大。在你想深度分析的工程根目录下建立一个 .root 目录,这样有利于节省空间。
安装插键
- 在命令行输入
vim
然后回车。 - 在 vim 界面输入
: PlugStatus
,回车,可以看到所有的插件都处于未安装状态 - 在 vim 界面输入
:PlugInstall
, 回车,开始安装插键。 - 安装完成后在 vim 界面再输入
: PlugStatus
,回车,可以看到所有固件已经处于 OK 状态。
简单使用
以阅读 Linux 内核代码为例:
在 Linux kernel 的根目录下建立一个 .root 文件夹:
cd linux-imx
mkidr .root
vim
- 查找文件: + F 组合键,然后在输入文件名关键字,按 Enter 选中文件。
可以看到,这里面不用输入准确的文件名字,只需要部分关键字,匹配度最高的文件出现在最上面,还可以通过 Ctrl + J 或者 K 上下移动光标, 来选择文件,很高效吧,这是通过 Leaderf 的模糊匹配算法实现的。
- 跳转到函数定义处: Ctrl + ] 组合键。
光标移动到函数 syscon_regmap_lookup_by_phandle
,按 Ctrl + ] 组合键,就跳到这个函数原型处,按 Ctrl + o 组合键返回。
vim 通过 J K 两个键上下移动光标。
- 查找那些地方有调用这个函数: Ctrl + F 组合键
按Ctrl + J 或者 K 上下移动光标, 来选择文件,这里选了atmel-ebi.c 这个文件,然后敲 Enter
键跳过去。
- 查找当前打开文件的函数列表。
这里直接用了 LeaderfFunction
这个命令,也可以定义成快捷键。
更多的使用技巧可以通过 Leaderf 的 github 查找,或者直接百度也能查到很多用例。
更多原创文章请扫码关注公众号:HackforFun