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 // 
相关推荐
橘颂TA1 小时前
【Linux】特效爆满的Vim的配置方法 and make/Makefile原理
linux·运维·服务器·vim
AI大法师1 小时前
企业级Linux服务器安全:防火墙规则配置与Web/SSH服务优化指南
linux·服务器·安全
花小璇学linux2 小时前
imx6ull-驱动开发篇10——pinctrl 子系统
linux·驱动开发·imx6ull·嵌入式软件
Hat_man_2 小时前
如何在虚拟机(Linux)安装Qt5.15.2
linux·运维·服务器
LLLLYYYRRRRRTT2 小时前
12. SELinux 加固 Linux 安全
linux·运维·安全
爱学习的小熊猫_3 小时前
在Linux上部署RabbitMQ、Redis、ElasticSearch
linux·redis·elasticsearch·中间件·rabbitmq
拾心213 小时前
【运维进阶】DHCP服务配置和DNS域名解析
linux·运维·服务器
陈陈爱java4 小时前
实习文档背诵
linux·服务器·windows
代码改变世界ctw4 小时前
TrustZone技术详解————这篇是AI写的包括图
linux
Johny_Zhao4 小时前
SeaTunnel的搭建部署以及测试
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·devops·seatunnel·系统运维