近期需要阅读 Linux Kernel 的源码,因为我日常使用 NeoVim + coc.nvim 在 Ubuntu 上进行开发,以下是我的配置记录。
NeoVim
: 是 Vim 的一个 fork 版本,可以使用 Lua 进行配置和扩展coc.nvim
: 是一套使用 javascript 开发的 LSP 实现,目标是贴近 VsCode 的使用体验ccls
: 是 C/C++/Objective-C 的 Language Server 实现bear
: 用于记录传递给编译器的命令以构建compile_commands.json
安装依赖
apt install clang libclang-14-dev bear
安装 ccls
git clone --depth=1 --recursive https://github.com/MaskRay/ccls
cd ccls
cmake -H. -BRelease -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/path/to/clang+llvm-xxx
cmake --build Release
ccls --version
配置 coc.nvim
{
"languageserver": {
"ccls": {
"command": "ccls",
"filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"],
"rootPatterns": [".ccls", "compile_commands.json", ".git/", ".hg/"],
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
}
}
}
}
}
克隆 Linux Kernel 并索引
git clone git@github.com:torvalds/linux.git
cd linux
# 此处我打算查看 x86 架构的代码
make O=. ARCH=x86 COMPILED_SOURCE=1 cscope tags
# 使用 bear 来监控一次构建,用于生成 compile_commands.json
bear -- make -j 8
完成上述步骤之后,通过 nvim 打开 内核代码 就可以通过 gd
来跳转定义了。