vim扩展

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

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


🔧 一、准备工作

1. 克隆 Linux 源码(可选)

bash 复制代码
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

🛠 二、配置 Vim

1. 启用语法高亮

~/.vimrc 中添加:

vim 复制代码
syntax on
set number
set relativenumber
set autoindent
set tabstop=8 shiftwidth=8 noexpandtab  " 保持和 Linux 源码一致

🔍 三、代码导航工具推荐

1. ctags(生成标签索引)

bash 复制代码
sudo apt install exuberant-ctags  # Ubuntu/Debian
ctags -R .

然后在 Vim 中可以使用:

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

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

bash 复制代码
sudo apt install cscope
cscope -Rbkq

~/.vimrc 中添加:

vim 复制代码
if has("cscope")
    set cscopequickfix=s-,c-,d-,i-,t-,e-
    cs add cscope.out
endif

在 Vim 中使用命令:

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

3. 插件建议

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

vim-plug 示例配置:
vim 复制代码
call plug#begin('~/.vim/plugged')

Plug 'preservim/tagbar'          " 结构导航
Plug 'majutsushi/tagbar'         " 或 tagbar 的其它版本
Plug 'dense-analysis/ale'        " 静态分析/语法检查
Plug 'junegunn/fzf.vim'          " 模糊查找
Plug 'ludovicchabant/vim-gutentags' " 自动生成 tags

call plug#end()

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

vim 复制代码
:PlugInstall

📘 四、使用技巧

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

vim 复制代码
:TagbarToggle

2. 使用搜索查找符号

vim 复制代码
/gpio_request

3. 快速跳转文件

vim 复制代码
: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 文件

在 Ubuntu 上怎么安装 vim-plug

这里是Ubuntu 上安装 vim-plug 的完整步骤 ,根据你用的是 Vim 还是 Neovim 我分别写清楚:


✅ 1. 安装 Vim 或 Neovim(如尚未安装)

安装 Vim:

bash 复制代码
sudo apt update
sudo apt install vim

安装 Neovim(推荐开发):

bash 复制代码
sudo apt update
sudo apt install neovim

✅ 2. 安装 vim-plug 插件管理器

👉 对于 Vim:

bash 复制代码
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

👉 对于 Neovim:

bash 复制代码
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

✅ 3. 配置插件(添加到配置文件)

如果你使用的是 Vim,编辑 ~/.vimrc

bash 复制代码
vim ~/.vimrc

添加以下内容作为起点:

vim 复制代码
call plug#begin('~/.vim/plugged')

" 插件示例(NERDTree 文件管理器)
Plug 'preservim/nerdtree'

" C/C++ 补全(依赖 clangd)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

call plug#end()

如果你使用的是 Neovim,编辑 ~/.config/nvim/init.vim

bash 复制代码
mkdir -p ~/.config/nvim
vim ~/.config/nvim/init.vim

添加同样的配置:

vim 复制代码
call plug#begin('~/.vim/plugged')

Plug 'preservim/nerdtree'
Plug 'neoclide/coc.nvim', {'branch': 'release'}

call plug#end()

✅ 4. 安装插件

打开 Vim 或 Neovim,执行命令:

vim 复制代码
:PlugInstall

这一步会下载你配置中的所有插件。


✅ 5. 检查 Coc.nvim 是否工作(自动补全)

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

bash 复制代码
sudo apt install clangd

然后在 Vim 中运行:

vim 复制代码
:CocInstall coc-clangd

之后打开 .c.cpp 文件,就能体验自动补全、跳转定义等功能。


✅ 示例效果图(安装成功后):

复制代码
~/.vimrc 或 ~/.config/nvim/init.vim:

call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
call plug#end()

在 Vim 中:

vim 复制代码
:PlugInstall

成功后你就有一个"类 IDE"的 Vim 环境了!


👍 很好!你已经成功下载并安装了 vim-plug 插件管理器!


✅ 配置插件(编辑 ~/.vimrc

运行以下命令编辑你的 Vim 配置文件:

bash 复制代码
vim ~/.vimrc

粘贴以下内容:

vim 复制代码
call plug#begin('~/.vim/plugged')

" 示例插件:NERDTree 文件浏览器
Plug 'preservim/nerdtree'

" 自动补全(推荐:C/C++ 用 coc.nvim)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

call plug#end()

" 一些基础设置
syntax on
set number
set relativenumber
set tabstop=4
set shiftwidth=4
set expandtab
set clipboard=unnamedplus
set mouse=a
filetype plugin indent on

保存并退出 Vim(按 Esc,输入 :wq 回车)。


要在 Vim 中使用 C/C++ 自动补全功能 (通过 coc.nvim + coc-clangd),你只需要完成以下几步配置和操作👇


✅ 一次性设置:启用 C/C++ 自动补全

1️⃣ 安装 clangd(语言服务器)

bash 复制代码
sudo apt install clangd

确认版本:

bash 复制代码
clangd --version

2️⃣ 在 Vim 中安装 coc-clangd 插件

打开 Vim,输入命令:

vim 复制代码
:CocInstall coc-clangd

等待几秒,安装完成后会提示成功。


3️⃣ 检查 .vimrc 是否有 coc.nvim 插件(你应该已经添加过):

vim 复制代码
call plug#begin('~/.vim/plugged')
Plug 'neoclide/coc.nvim', {'branch': 'release'}
call plug#end()

如果你修改过 .vimrc,记得在 Vim 中执行:

vim 复制代码
:source ~/.vimrc
:PlugInstall

🧪 使用补全功能:打开 .c.cpp 文件

示例步骤:

bash 复制代码
vim hello.cpp
cpp 复制代码
#include <iostream>

int main() {
    std::cout << "Hello, ";
    return 0;
}

你可以尝试输入:

cpp 复制代码
std::

如果安装成功,会弹出一个补全菜单,比如:

复制代码
┌──────────────┐
│ cout         │
│ cin          │
│ endl         │
└──────────────┘

TabEnter 选择,继续输入。


🚀 常用快捷键(使用自动补全 & coc)

操作 快捷键
触发补全 Ctrl + Space(默认会自动触发)
选中补全项 TabEnter
跳转到定义 gd
显示函数文档 K
格式化代码 :CocCommand editor.action.formatDocument
重命名变量 <leader>rn(通常为 \rn

🛠 如果补全没生效怎么办?

✅ 检查项目根目录是否有 compile_commands.json(对大型项目有帮助)

如果你使用的是 CMake 项目,在构建目录中生成它:

bash 复制代码
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..

然后将 compile_commands.json 软链接或拷贝到项目根目录。


在 Vim 中使用插件(如 coc.nvim)进行代码提示补全时,选中并插入候选项 的方式依赖于你的补全引擎。下面以 最常用的 coc.nvim 为例,详细说明如何"选中输入"。


✅ 使用 coc.nvim 补全时如何选中候选项

当你输入代码看到提示列表时:

✔ 常见按键操作:

按键 功能
<Tab> 选择下一个候选项
<Shift-Tab> 选择上一个候选项
<CR>(回车) 确认并插入选中项
<Esc> 取消补全

🛠 如果你按回车没插入,而是换行了?

说明你的 coc.nvim 没有正确绑定 <CR> 行为。你需要在 ~/.vimrc 中添加如下配置:

vim 复制代码
" Use <CR> to confirm completion and fallback if no selection
inoremap <silent><expr> <CR> pumvisible() ? coc#_select_confirm() : "\<CR>"

这个配置的意思是:

  • 如果补全菜单显示,就选中当前项并插入;
  • 否则就是普通的回车换行。

🔄 Tab 补全不工作?

添加这两个映射(推荐):

vim 复制代码
" Use <Tab> and <S-Tab> to navigate completion menu
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"

🧪 示意操作流程:

假设你在 C 文件中输入:

c 复制代码
pri

然后会出现提示:

复制代码
printf
private
priority

你按:

  • <Tab> 选中 printf
  • <CR> 插入 printf → 变成:printf

✅ 总结:你需要配置的快捷键

vim 复制代码
" 回车键:补全确认 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>"

🎁 可选:显示文档提示窗口

你也可以加一个快捷键,比如:

vim 复制代码
nnoremap <silent> K :call CocActionAsync('doHover')<CR>

然后光标放在函数名上,按 K 显示文档说明(和 LSP 一样)。


在 Ubuntu 上为 Vim 安装 Gruvbox 主题,你可以按照以下步骤操作:


✅ 步骤一:确保 Vim 支持 256 色或 true color

运行以下命令检查 Vim 是否为完整版(支持插件和颜色):

bash 复制代码
vim --version | grep +clipboard

如果你看到类似 +clipboard+python 等,就说明是完整版。

如果没有,可以安装 vim-gtkvim-gtk3

bash 复制代码
sudo apt update
sudo apt install vim-gtk3

✅ 步骤二:安装 Gruvbox 主题

你可以通过 Git 将 Gruvbox 克隆到 Vim 的 colors 文件夹中:

bash 复制代码
mkdir -p ~/.vim/pack/themes/start
cd ~/.vim/pack/themes/start
git clone https://github.com/morhetz/gruvbox.git

✅ 步骤三:配置 Vim 使用 Gruvbox

编辑你的 Vim 配置文件:

bash 复制代码
vim ~/.vimrc

添加以下内容:

vim 复制代码
syntax enable
set background=dark " 或 light,根据你的喜好
colorscheme gruvbox

如果你使用的是 true color 终端(如 alacritty, kitty, wezterm 或新版 gnome-terminal),你可以添加:

vim 复制代码
set termguicolors

✅ 步骤四:重启 Vim 以应用主题

bash 复制代码
vim

你应该能看到 gruvbox 的配色效果。


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

如果你使用 vim-plug,可以在 ~/.vimrc 中添加:

vim 复制代码
call plug#begin('~/.vim/plugged')
Plug 'morhetz/gruvbox'
call plug#end()

syntax enable
set background=dark
colorscheme gruvbox

然后在 Vim 中运行 :PlugInstall 即可。


当然!Gruvbox 是 Vim 中非常受欢迎的主题之一,但它并不是唯一的选择。有些主题在对比度、可读性、语言支持(特别是搭配 Tree-sitter 或 LSP)方面甚至更胜一筹。


🌈 以下是一些 比 Gruvbox 更好用(或不同风格更适合你) 的 Vim 主题推荐:

1. Tokyonight 🌙

  • ⭐️ 风格现代,颜色清晰柔和,适合长时间编码
  • ✅ 支持真彩色(termguicolors)、支持 Tree-sitter、高亮精准
  • 🎨 多种风格(night, storm, day, moon
vim 复制代码
Plug 'folke/tokyonight.nvim', { 'branch': 'main' }
vim 复制代码
set termguicolors
colorscheme tokyonight-night

2. Catppuccin 🐱☕️

  • 🔥 近年非常流行,极为舒适、色彩协调
  • ☕️ 主题柔和不刺眼,支持多语言语法高亮
  • 🎨 多种口味(latte, frappe, macchiato, mocha
vim 复制代码
Plug 'catppuccin/vim', { 'as': 'catppuccin' }
colorscheme catppuccin-mocha

3. Everforest 🌲

  • 🌿 中性色+森林绿,暗色柔和但对比足够
  • ✅ 支持 terminal / GUI / truecolor
  • 📖 适合日常开发,眼睛不累
vim 复制代码
Plug 'sainnhe/everforest'
set background=dark
let g:everforest_background = 'hard' " soft / medium / hard
colorscheme everforest

4. Solarized (Dark & Light) ☀️🌑

  • 📘 经典耐看,科学配色
  • 📦 非常适合终端工具党
  • 🚫 有人觉得对比度太低(可调)
vim 复制代码
Plug 'altercation/vim-colors-solarized'
set background=dark " 或 light
colorscheme solarized

5. One Dark / One Light (VSCode 风格) ⚙️

  • 🎯 喜欢 VSCode 的人几乎都喜欢这个
  • ✅ 对比适中、简洁、清晰
vim 复制代码
Plug 'joshdick/onedark.vim'
colorscheme onedark

6. Nightfox (支持多主题) 🦊

  • 🧠 支持多种风格:nightfox, dawnfox, nordfox, terafox
  • ✅ 高级语法支持、广泛语言覆盖
vim 复制代码
Plug 'EdenEast/nightfox.nvim'
lua << EOF
vim.cmd("colorscheme nightfox")
EOF

📷 对比预览(视觉风格简略说明)

Theme 风格 特点
Tokyonight 现代、清爽 清晰对比、非常舒服的蓝紫色调
Catppuccin 柔和、温润 适合长时间工作,搭配很好
Everforest 自然、护眼 有点 Gruvbox 的味道,但更清爽
Onedark 工业风 VSCode 如果你喜欢 VSCode 的配色
Nightfox 多变、风格化 一个主题包多个风格,非常灵活

✅ 我的推荐(不同用户类型)

  • 👁️‍🗨️ 护眼党Everforest / Catppuccin
  • 👨‍💻 现代风格Tokyonight / Nightfox
  • 🎮 VSCode 党Onedark
  • 📼 复古怀旧Solarized / Gruvbox

在 Vim 中使用 coc.nvim 实现代码格式化功能,主要依赖于 CoC 的 语言服务插件(language server extensions),这些插件提供了格式化能力。

下面是配置 coc.nvim 实现代码自动格式化的完整指南:


🧩 第一步:安装 coc.nvim(如果你还没装)

使用插件管理器,例如 vim-plug

vim 复制代码
Plug 'neoclide/coc.nvim', {'branch': 'release'}

安装后,在 Vim 中运行:

复制代码
:PlugInstall

📦 第二步:安装对应语言的 Coc 扩展

进入 Vim,运行:

复制代码
:CocInstall coc-json coc-tsserver coc-python coc-html coc-css

你可以根据需要选择语言,比如:

  • JavaScript / TypeScript: coc-tsserver
  • Python: coc-python
  • Go: coc-go
  • Rust: coc-rust-analyzer
  • JSON: coc-json

✨ 第三步:格式化快捷键设置(推荐)

在你的 ~/.vimrcinit.vim 中添加:

vim 复制代码
" 使用 <leader>f 格式化当前 buffer
nmap <leader>f :call CocActionAsync('format')<CR>

使用时只需要按 <leader>f(通常 <leader>\)就可以格式化代码。


🛠️ 可选:保存时自动格式化

如果你希望在保存时自动格式化代码,添加以下内容:

vim 复制代码
autocmd BufWritePre * silent! :call CocAction('format')

这会在每次保存文件前自动格式化(前提是当前语言的 LSP 支持格式化)。


✅ 检查格式化是否启用

你可以用以下命令手动格式化当前文件:

复制代码
:CocCommand editor.action.formatDocument

📝 检查是否支持格式化

在 Vim 中用这个命令:

vim 复制代码
:CocList services

看看对应语言服务是否启用了 format 功能。


⚠️ 注意事项

  • 如果格式化没有生效,可能是没有安装对应语言的格式化工具(如 prettier, black, gofmt 等)。
  • 某些语言服务器不内置格式化能力,需要手动配置工具。

在 Vim 中进行 C 语言开发 ,可以结合一些快捷键、配置和插件,使编辑、编译、调试变得高效。下面是常见的 C语言 Vim 快捷键推荐 + 实用插件配置,适合初中高级用户:


✅ 1. 基础快捷键(原生 Vim)

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

✅ 2. 配置 C 文件专用选项(在 ~/.vimrc

vim 复制代码
" 针对 C 文件设置
autocmd FileType c setlocal tabstop=4 shiftwidth=4 expandtab
autocmd FileType c setlocal makeprg=gcc\ %\ -o\ %< && ./ %< 

说明:

  • makeprg 设置 :make 命令为用 gcc 编译当前文件,然后运行;
  • % 表示当前文件,%< 表示不带扩展名的当前文件名。

✅ 3. 插件推荐(用 vim-plug)

vim 复制代码
call plug#begin('~/.vim/plugged')

Plug 'neoclide/coc.nvim', {'branch': 'release'}        " 智能补全、跳转、语法检查
Plug 'preservim/tagbar'                                " 显示函数、结构体列表
Plug 'tpope/vim-commentary'                            " 快速注释
Plug 'ludovicchabant/vim-gutentags'                    " 自动生成 tags 文件
Plug 'vim-airline/vim-airline'                         " 状态栏增强

call plug#end()

安装后,在 Vim 中运行 :PlugInstall


✅ 4. 常用快捷键建议(自定义)

你可以在 ~/.vimrc 里添加:

vim 复制代码
" 编译当前 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 // 

✅ 5. C 语言跳转支持(配合 ctags)

bash 复制代码
sudo apt install ctags

在项目根目录生成标签:

bash 复制代码
ctags -R .

然后在 Vim 中就可以使用:

跳转功能 快捷键
跳转到定义 Ctrl-]
跳回 Ctrl-T

✅ 6. 编译 & 运行整合(无 makefile 时)

vim 复制代码
nnoremap <F9> :w<CR>:!gcc % -Wall -o %< && ./%<<CR>

F9 会编译并直接运行当前文件,适合小测试程序。


🔚 总结(最推荐的快捷键):

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

最终的~/.vimrc 如下

bash 复制代码
call plug#begin('~/.vim/plugged')

" 示例插件:NERDTree 文件浏览器
Plug 'preservim/nerdtree'

" 自动补全(推荐:C/C++ 用 coc.nvim)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" 主题
Plug 'morhetz/gruvbox'

Plug 'preservim/tagbar'                                " 显示函数、结构体列表
Plug 'tpope/vim-commentary'                            " 快速注释
Plug 'ludovicchabant/vim-gutentags'                    " 自动生成 tags 文件
Plug 'vim-airline/vim-airline'                         " 状态栏增强

call plug#end()

" 一些基础设置
syntax on
set background=dark
colorscheme gruvbox
set number
"set relativenumber
set tabstop=4
set shiftwidth=4
set expandtab
set clipboard=unnamedplus
"set mouse=a
set termguicolors
filetype plugin indent on


" 回车键:补全确认 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 // 
相关推荐
赵健zj30 分钟前
鸿蒙Next开发,配置Navigation的Route
android·linux·ubuntu
Ruimin051936 分钟前
LSV负载均衡
linux·运维·服务器·负载均衡·lvs
好奇的菜鸟1 小时前
Linux 系统下的 Sangfor VDI 客户端安装与登录完全攻略 (CentOS、Ubuntu、麒麟全线通用)
linux·ubuntu·centos
渊兮旷兮1 小时前
vscode 安装 esp ide环境
ide·vscode·编辑器
AuroraDPY1 小时前
Linux 环境变量
linux·运维·服务器
Ronin3052 小时前
【Linux系统】进程切换 | 进程调度——O(1)调度队列
linux·运维·服务器·ubuntu
万象.2 小时前
Linux多进程
linux
苦瓜汤补钙2 小时前
论文阅读:WildGS-SLAM:Monocular Gaussian Splatting SLAM in Dynamic Environments
linux·论文阅读·机器学习
梦仔生信进阶2 小时前
【windows办公小助手】比文档编辑器更好用的Notepad++轻量编辑器
编辑器·notepad++