当前位置: 首页 > news >正文

vim扩展与 neovim

使用 Vim 阅读 Linux 内核源码是一种高效、轻量级的方式。Linux 源码工程非常庞大,因此推荐你结合 Vim 的一些插件和功能来提高代码导航和阅读效率。

下面是一个完整的指南,帮你用 Vim 更高效地阅读 Linux 源码。


🔧 一、准备工作

1. 克隆 Linux 源码(可选)

git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

🛠 二、配置 Vim

安装 VIM

sudo apt install vim

修改 ~/.vimrc 如下


call plug#begin('~/.vim/plugged')" 主题
Plug 'morhetz/gruvbox'
Plug 'sainnhe/everforest'
Plug 'kaicataldo/material.vim'
Plug 'joshdick/onedark.vim'"示例插件:NERDTree 文件浏览器
Plug 'preservim/nerdtree'" 自动补全(推荐:C/C++ 用 coc.nvim)
Plug 'neoclide/coc.nvim', {'branch': 'release'}Plug 'preservim/tagbar'                                " 显示函数、结构体列表
Plug 'tpope/vim-commentary'                            " 快速注释
Plug 'ludovicchabant/vim-gutentags'                    " 自动生成 tags 文件
Plug 'vim-airline/vim-airline'                         " 状态栏增强
Plug 'dense-analysis/ale'        " 静态分析/语法检查
Plug 'junegunn/fzf.vim'          " 模糊查找call plug#end()" 设置主题风格
"let g:gruvbox_contrast_dark = 'hard'
"let g:everforest_background = 'hard'
"let g:material_theme_style = 'darker'  " 其他风格: 'darker', 'lighter', 'palenight'
set termguicolors
set background=dark
colorscheme gruvbox
"colorscheme everforest
"colorscheme material
"colorscheme onedark" 一些基础设置
syntax on
set number
set relativenumber
set autoindent
set tabstop=4
set shiftwidth=4
set expandtab
set clipboard=unnamedplus
"set mouse=a
filetype plugin indent onif has("cscope")set cscopequickfix=s-,c-,d-,i-,t-,e-cs add cscope.out
endif" 回车键:补全确认 or 正常换行
inoremap <silent><expr> <CR> pumvisible() ? coc#_select_confirm() : "\<CR>"" Tab 和 Shift-Tab:切换候选项
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"" 编译当前 C 文件并运行
nnoremap <F5> :w<CR>:!gcc % -o %< && ./%<<CR>" 打开 Tagbar 显示结构
nnoremap <F8> :TagbarToggle<CR>" 使用 coc 格式化
nnoremap <leader>f :call CocActionAsync('format')<CR>" 快速插入行末注释
nnoremap <leader>c A // 

在 VIM 中

:PlugInstall

🔍 三、代码导航工具推荐

1. 安装 clangd(C/C++ 补全需要):

sudo apt install clangd

2. ctags(生成标签索引)

sudo apt install exuberant-ctags  # Ubuntu/Debian
ctags -R .

然后在 Vim 中可以使用:

  • Ctrl-]:跳转到定义
  • Ctrl-T:跳转回上一个位置
  • :tag function_name:跳转到某个函数定义

3. cscope(跨文件查找符号/函数调用)

sudo apt install cscope
cscope -Rbkq

在 Vim 中使用命令:

  • :cs find c FUNCTION:查找调用 FUNCTION 的地方
  • :cs find d FUNCTION:查找 FUNCTION 的定义
  • :cs find s SYMBOL:查找符号
  • :cs find t TEXT:查找文本

4. 插件建议

使用插件管理器(如 vim-plug):

安装插件后,在 Vim 中运行:

:PlugInstall

📘 四、使用技巧

1. 打开 Tagbar 查看结构(需安装 ctags

:TagbarToggle

2. 使用搜索查找符号

/gpio_request

3. 快速跳转文件

:e drivers/gpio/gpio.c

4. 使用 marks 和跳转命令

  • mA:标记位置 A
  • 'A:跳转到位置 A

🧠 五、阅读建议

  • init/main.c 开始,了解 Linux 启动过程。
  • 跟踪 start_kernel() 函数的调用。
  • 熟悉 include/linux/arch/ 下的结构。

✅ 六、总结

工具功能
ctags函数/变量跳转
cscope函数调用、定义、引用
tagbar显示当前文件的结构
fzf.vim快速搜索文件/函数
gutentags自动维护 tags 文件


基础快捷键(原生 Vim)

功能快捷键说明
缩进>> / <<向右 / 向左缩进一行
编译:make使用 Makefile 编译
保存并编译:w<CR>:make<CR>保存后调用 make
跳到函数定义gd跳转到局部变量/函数定义(需要 tags 支持)
跳转上一个位置Ctrl-o类似“返回”
跳转下一个位置Ctrl-i类似“前进”
显示行号:set number
自动缩进==gg=G当前行 / 全文自动缩进

快捷键功能
F5编译并运行当前文件
<leader>f格式化代码(配合 coc)
<F8>切换 Tagbar(函数列表)
gd跳转到定义(配合 coc)
<leader>c在行末添加注释 //

NeoVIM

通过 apt 安装的 Neovim 版本通常非常落后,因为 Ubuntu/Debian 官方软件源更新滞后。


✅ 推荐的安装方式(获取最新版 Neovim)

方法一:使用官方 AppImage(简单可靠)

# 下载最新 AppImage(适用于所有 Linux)
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim.appimage# 添加执行权限
chmod u+x nvim.appimage# 移动到可执行路径
sudo mv nvim.appimage /usr/local/bin/nvim

方法二:使用官方 PPA(Ubuntu/Debian)

如果你不喜欢 AppImage,可以使用 Neovim 的官方 PPA:

sudo apt remove neovim -y
sudo add-apt-repository ppa:neovim-ppa/unstable
sudo apt update
sudo apt install neovim

这会安装开发分支版本(一般也很稳定)。


NvChad 安装

NvChad 是一个基于 Neovim 的高级配置框架,它为 Neovim 用户提供了一个即开即用、现代化、可自定义的开发环境,目标是将 Neovim 打造成一个像 VSCode 一样强大但更快的编辑器。


✅ NvChad 安装前提(Pre-requisites)

✅ 必须项:

  1. Neovim ≥ 0.11

    • 你当前的 Neovim 是通过 apt 安装的旧版本(0.9.5),需要升级
    • 推荐使用 AppImage 安装(见下方)。
  2. Nerd Font 字体(用于显示图标)

    • 推荐:JetBrainsMono Nerd Font

    • 注意不要用名字中带 Mono 的字体,例如:

      • JetBrainsMono Nerd Font
      • JetBrainsMono Nerd Font Mono
  3. Ripgrep(可选)

    • 用于 Telescope 快速搜索:

      sudo apt install ripgrep
      
  4. GCC 和 make

    • Linux 一般已装,没有的话:

      sudo apt install build-essential
      

🚀 安装 NvChad

删除旧配置:

rm -rf ~/.config/nvim ~/.local/state/nvim ~/.local/share/nvim

克隆 Starter 配置:

git clone https://github.com/NvChad/starter ~/.config/nvim
nvim

第一次启动时会自动下载 NvChad 主体 和插件(lazy.nvim 会处理)。


⚙️ 安装全部 LSP(首次运行后)

进入 Neovim 输入命令:

:MasonInstallAll

🧼 删除 .git 文件夹(可选)

rm -rf ~/.config/nvim/.git

🔄 更新插件

:Lazy sync

🔧 自定义配置

编辑:

nvim ~/.config/nvim/lua/custom/chadrc.lua

可改:

  • 主题(theme)
  • 插件
  • 语言服务器(LSP)
  • 其他 UI 行为

http://www.dtcms.com/a/279905.html

相关文章:

  • IOS开发者账号如何添加 uuid 原创
  • Doris
  • 20250714--长连接应用中ORA-04061: existing state of has been invalidated
  • 迪拜金融市场交易量激增,中阿资本合作深化——阿联酋交易所系统解决方案全景解析
  • Transformer江湖录 第七章:江湖新篇 - Transformer的现代演化
  • FilterRegistationBean报错does not have type parameters。idea启动日志无明显报错提示冲突 kaki的博客
  • 力扣-25.K个一组翻转链表
  • 多线程进阶——线程安全的集合类
  • B站自动回复工具(破解)
  • Linux多进程
  • 国产IP摄像头存在隐蔽后门,攻击者可获取Root权限
  • 知识点2:MCP:python-sdk 核心概念
  • 丑团-h5-Mtgsig算法-分析
  • 技能升级--二分例题
  • 2025年大数据、建模与智能计算国际会议(ICBDMIC 2025)
  • 指针和数组(二)
  • AI 临床医学课题【总结】
  • Vue2 day08-10(智慧商城)
  • 应用系统报错:com.highgo.jdbc.util.PSQLException:bad value for long(APP)
  • DOM事件绑定时机:解决脚本提前加载导致的绑定失败
  • git modules
  • 8.6 Rag-基础工具介绍(开源工具)
  • 5、qt系统相关
  • 面试150 根节点到叶子节点数字之和
  • 机构参与度及其Python数据获取示例
  • SVD、DCT图像压缩实践
  • 020 实现一个简易 Shell
  • Java集合和字符串
  • JVM-1
  • 现场设备无法向视频汇聚EasyCVR视频融合平台推流的原因排查与解决过程