Vim 高级技巧:宏、寄存器、插件与 IDE 集成

小飞兽 Vim 13 次阅读 2026-07-29

掌握 Vim 的基础编辑能力后,进一步学习宏、寄存器、插件系统,可以将 Vim 打造成功能完备的高效开发环境。

一、宏的录制与回放

# q<register> 开始录制,q 结束录制,@<register> 回放

示例:将每行格式从 "name: value" 改为 "name = value"

host: localhost → host = localhost

port: 3306 → port = 3306

1. 将光标移到第 1 行
2. 按 qa # 开始录制到寄存器 a
3. 执行操作:
$ # 跳到行尾
f: # 找到冒号
r= # 将冒号替换为等号
l # 右移一格
x # 删除空格
j # 下一行
4. 按 q # 结束录制
5. 4@a # 回放寄存器 a 中的宏 4 次

查看宏内容

:reg a # 查看寄存器 a 的内容 :reg # 查看所有寄存器

批量文件操作

:bufdo normal @a # 对所有打开的 buffer 执行宏

二、寄存器操作

# 寄存器分类

"a-"z 命名寄存器 a~z(可大写追加内容)

"0 复制寄存器 最后一次 yank(y)的内容

"1-"9 数字寄存器 最后 9 次删除的内容(1=最近)

"- 小删除寄存器 不足一行的删除内容

"" 无名寄存器 默认寄存器

"_ 黑洞寄存器 删除内容不进入任何寄存器

"+ 系统粘贴板 与系统粘贴板互通(Ctrl+C/V)

"% 文件名寄存器 当前文件名

". 上次插入文本 最后在 Insert 模式输入的文本

": 命令寄存器 最后执行的 : 命令

"/ 搜索寄存器 上次搜索的关键词

'ayy # 复制当前行到寄存器 a
'A # 追加到寄存器 a(大写 A 表示追加)

'ap # 在光标后粘贴寄存器 a 的内容
'aP # 在光标前粘贴
'+p # 粘贴系统粘贴板内容(跨程序复制粘贴)
". # 粘贴上次插入的文本

"1p # 粘贴最近一次删除的内容
"2p # 粘贴倒数第二次删除的内容

三、插件管理(vim-plug)

# vim-plug 安装(Unix/macOS)
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \\\n https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

.vimrc 配置插件

call plug#begin('~/.vim/plugged')

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'connorholyc/vim-tokyonight'

Plug 'junegunn/fzf', { 'do': './install --bin' }
Plug 'junegunn/fzf.vim'

Plug 'preservim/nerdcommenter'
Plug 'tpope/vim-surround'
Plug 'easymotion/vim-easymotion'

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

Plug 'lewis6991/gitsigns.nvim'
Plug 'tpope/vim-fugitive'

call plug#end()

插件命令

:PlugInstall # 安装插件 :PlugUpdate # 更新所有插件 :PlugClean # 清理未使用的插件目录 :PlugStatus # 查看插件状态

四、VSCode Neovim 集成

# 安装 Neovim

macOS: brew install neovim

Ubuntu: sudo apt install neovim

VSCode 安装扩展:'asvetliakov.vscode-neovim'

.vscode/settings.json 配置:

{

"vscode-neovim.neovimExecutablePaths.darwin": "/opt/homebrew/bin/nvim",

"vscode-neovim.neovimInitVimPath": "~/.config/nvim/init.vim",

}

这样 VSCode 的文本编辑会使用真正的 Neovim,支持所有 Vim 插件和配置

Neovim 配置(~/.config/nvim/init.vim)

set number set relativenumber set mouse=a set clipboard=unnamedplus

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

五、常见问题

Q1:宏执行过程中出错停止了,如何接着处理剩下的文件?
使用 :argdo 前确保文件格式一致。宏失败后当前文件停留在出错位置,可用 :next 跳到下一个文件继续。

Q2:Vim 的粘贴板和系统粘贴板不互通怎么办?
确保 Vim 编译时支持 +clipboard 特性(vim --version | grep clipboard)。Linux 下通常需要 vim-gtk3vim-gnome 包。

Q3:插件安装后 Vim 启动变慢怎么排查?
vimrclet g:loaded_<plugin> = 1 禁用不需要的插件。Vim 8+ 可用 :profile start profile.log | profile func * | profile file * 生成性能日志分析慢启动原因。

六、延伸阅读