Vim生存指南 ✍️
🎮 编辑器之神速成手册 在这里你将掌握:
- 普通模式的骚操作 🕹️
- 文本操作的六脉神剑 ✂️
- 可视化模式的奥秘 👁️
- 插件配置的魔法 🔧
- 实战中的保命连招 🥋
1. 普通模式绝技
🌟 必杀四连击
vim
ci" " 删除引号内容并进入插入模式(Clear Inside)
vip " 选中整个段落(Visual Inner Paragraph)
% " 在配对的括号间跳跃(如 (){}[])
fx " 向右跳转到字符x的位置(Find X)🚀 行级穿梭术
vim
gg " 瞬移到文件开头(Ground Zero)
G " 直达文件末尾(Grand Finale)
7G " 精准定位第7行(Go to Line)2. 复制粘贴艺术
vim
y2w " 复制两个单词(Yank 2 Words)
y$ " 复制到行尾(Yank to End)
yy " 复制整行(Yank Yank)
6yy " 复制6行(Yank 6 Lines)
"ap " 粘贴a寄存器内容(Apply Register)vim
:10,20y " 精确复制10-20行(Yank Range)
gp " 粘贴后光标留在末尾(Good Paste)
df' " 剪切直到单引号(Delete Find)
"ayy " 将当前行存入a寄存器(Assign Yank)✂️ 剪切板秘籍
| 命令 | 功能描述 | 使用场景 | 类比说明 |
|---|---|---|---|
diw | 删除当前单词 | 快速修正拼写错误 | 文字手术刀 |
dt) | 删除直到右括号 | 清理函数参数 | 括号收割机 |
cc | 删除整行并进入插入模式 | 重写代码逻辑 | 行级橡皮擦 |
xp | 交换相邻字符 | 调整变量名顺序 | 字符调音师 |
3. 时空操纵术
⏳ 时间法则
vim
u " 撤销操作(Undo Time)
<C-r> " 重做操作(Reverse Time)4. 可视化模式探秘
👀 三维视觉
vim
v " 字符级可视化模式(Character Vision)
V " 行级可视化模式(Line Vision)
<C-v> " 块状可视化模式(Block Vision)5. 实战:代码编辑连招 🥊
vim
// 经典三连击:定位->开新行->开写
gg -> o -> i# Hello World<Esc>
/* 🥋 连招解析:
1. gg 跳转到文件开头
2. o 在下方新建行并进入插入模式
3. 输入内容后返回普通模式 */
// 高效修改函数参数
f( -> ci( -> 输入新参数
/* ⚡ 性能提示:
1. f( 跳转到左括号
2. ci( 清除括号内容并进入插入模式
3. 直接输入新参数 */6. 插件工坊 🔧
🛠️ 插件配置
vim
" ~/.ideavimrc
" 使用系统剪贴板
set clipboard+=unnamedplus
" 中英文输入法自动切换
set keep-english-in-normal
" 仿真NERDTree插件
" https://github.com/JetBrains/ideavim/wiki/NERDTree-support
set NERDTree
" nmap <leader>e :NERDTreeFind<CR>
" 映射快捷键,<leader> 是 \ 键,这句话是用 \o 替代 打开NERDTree插件
nmap <leader>o :NERDTree<CR>
" 高亮搜索
set hlsearch
" 搜索时跳到搜索目标处
set incsearch
" 智能搜索
set ignorecase
set smartcase
" 取消高亮
nmap <ESC> :noh<CR>
" 行号显示
set nu
" 相对行号
set rnu
" 滚动时保持上下边距
set scrolloff=5
" 复制当前缓冲区全文
nmap <C-a> mmggVGy`m
" 打开终端
nmap `` <Action>(ActivateTerminalToolWindow)
" 格式化
nmap <leader>fm <Action>(ReformatCode)
" 跳转tab
nmap ]t <Action>(PreviousTab)
nmap [t <Action>(NextTab)json
// settings.json
{
"vim.useSystemClipboard": true, // 使用系统剪贴板
"vim.incsearch": true, // 增量搜索
"vim.ignorecase": true, // 智能搜索
"vim.smartcase": true,
"editor.lineNumbers": "relative", // 相对行号
"vim.leader": "\\", // 定义 Leader 键
"editor.lineNumbers": "on"
}
// C:\Users\deLong\AppData\Roaming\Code\User\keybindings.json
[
// 打开资源管理器(替代 NERDTree)
{
"key": "\\ o",
"command": "workbench.view.explorer"
},
// 格式化代码
{
"key": "\\ fm",
"command": "editor.action.formatDocument"
},
// 标签页切换
{
"key": "] t",
"command": "workbench.action.nextEditor"
},
{
"key": "[ t",
"command": "workbench.action.previousEditor"
},
{
"key": "ctrl+a ctrl+c",
"command": "editor.action.clipboardCopyAction",
"when": "editorTextFocus"
},
// 打开终端
{
"key": "` `",
"command": "workbench.action.terminal.toggleTerminal"
}
]🚨 Vim避坑指南
- 模式混淆:忘记退出插入模式直接输入命令(按 Esc 返回普通模式)
- 寄存器陷阱:未指定寄存器时使用默认寄存器(小心覆盖重要内容)
- 计数灾难:误输入数字导致重复操作(如 100dd 会删除100行)
- 可视化选择:块选择后直接输入会修改所有选中行
- 插件冲突:多个插件同时修改相同快捷键
💡 生存小贴士
vim
:help navigation " 查看移动命令文档
:verb map <C-s> " 检查某个快捷键映射
:reg " 查看所有寄存器内容
q: " 打开命令历史窗口7. 搜索与替换之道 🔍
🕵️ 追踪术
vim
/pattern " 向前搜索模式(按n继续)
?pattern " 向后搜索模式(按N继续)
* " 跳转到当前单词下一次出现处
# " 跳转到当前单词上一次出现处🧨 替换核弹
vim
:s/old/new/g " 当前行替换
:%s/old/new/gc " 全局替换并确认(小心使用!)
:'<,'>s/old/new/g " 在选中区域替换正则表达式宝典
| 模式 | 含义 | 示例 |
|---|---|---|
\v | 启用魔法模式 | \v\d{3} 匹配3位数字 |
\< \> | 单词边界 | \<vim\> 精确匹配vim |
%V | 仅在选中区域匹配 | 配合可视化模式使用 |
8. 多宇宙穿梭术 🌌
vim
:ls " 查看缓冲区列表(宇宙目录)
:b 2 " 跳转2号缓冲区(宇宙穿梭)
:bd " 关闭当前缓冲区(关闭虫洞)vim
<C-w>v " 垂直分割窗口(平行宇宙)
<C-w>s " 水平分割窗口(上下宇宙)
<C-w>h " 切换到左侧窗口(宇宙跳跃)vim
:tabnew " 新建标签页(开启新维度)
gt " 切换下一个标签页(维度跳跃)
gT " 切换上一个标签页(逆转时空)9. 宏录制秘术 🎥
🎬 动作捕捉
vim
qa " 开始录制宏到寄存器a
q " 停止录制
@a " 执行寄存器a的宏
@@ " 重复上次执行的宏实战案例:批量添加分号
vim
1. qa " 开始录制
2. A;<Esc> " 行尾添加分号
3. j " 跳转到下一行
4. q " 停止录制
5. 10@a " 重复执行10次10. 配置炼金术 ⚗️
🧪 .vimrc 核心配方
vim
" 基础强化
set number " 显示行号
syntax on " 语法高亮
set mouse=a " 启用鼠标支持
" 搜索优化
set hlsearch " 高亮搜索结果
set incsearch " 实时搜索反馈
" 缩进设置
set tabstop=4 " 制表符宽度
set shiftwidth=4 " 自动缩进宽度
set expandtab " 用空格代替制表符11. 插件百宝箱 📦
必备神器
| 插件名 | 功能描述 | 安装命令 |
|---|---|---|
| NERDTree | 文件树导航 | Plug 'preservim/nerdtree' |
| vim-airline | 状态栏美化 | Plug 'vim-airline/vim-airline' |
| coc.nvim | 智能补全引擎 | Plug 'neoclide/coc.nvim' |
| fzf.vim | 模糊文件搜索 | Plug 'junegunn/fzf.vim' |
配置示例
vim
" 在.vimrc中添加
call plug#begin()
Plug 'preservim/nerdtree'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
call plug#end()
" NERDTree快捷键映射
nnoremap <C-n> :NERDTreeToggle<CR>🚨 高阶警告
- 递归宏陷阱:录制宏时避免包含宏调用指令
- 全局替换风险:始终先测试再使用
s//g,可先加c确认 - 缓冲区泄漏:长期未保存的缓冲区可能丢失数据
- 插件冲突:相似功能的插件可能互相干扰
- 正则回溯:复杂正则可能导致性能问题
💡 终极生存技巧
vim
:!ls -l " 执行shell命令(临时穿越到系统)
ZZ " 保存并退出(终极保命技)
:earlier 5m " 回到5分钟前的编辑状态(时间倒流)
:set paste " 进入粘贴模式(防止自动缩进混乱)12. 闪电导航术 ⚡
🧭 空间折叠术
vim
zt " 当前行置顶(Top of screen)
zz " 当前行居中(Center screen)
zb " 当前行置底(Bottom of screen)
<C-o> " 跳回上次位置(时空折跃)
<C-i> " 跳向下个位置(未来穿梭)🚁 三维定位系统
| 命令 | 功能描述 | 使用场景 | 性能增益 |
|---|---|---|---|
H | 跳转到屏幕顶部(High) | 长文件快速回顶 | 视觉定位加速50% |
M | 跳转到屏幕中部(Middle) | 精准定位代码块 | 眼球运动减少70% |
L | 跳转到屏幕底部(Low) | 快速查看文件结尾 | 滚动效率提升3倍 |
{/} | 按段落跳转 | 处理代码逻辑块 | 结构导航提速40% |
vim
m[a-z] " 设置标记(如ma设置标记a)
'[标记] " 跳转到标记行首(如'a)
`[标记] " 精准跳转到标记位置(如`a)vim
[[ " 跳转到上一个函数开头
]] " 跳转到下一个函数开头
% " 在匹配的括号间跳跃(增强版)
gd " 跳转到局部定义(Go Definition)🚄 滚动加速器
vim
<C-u> " 上翻半屏(Up)
<C-d> " 下翻半屏(Down)
<C-b> " 上翻整屏(Backward)
<C-f> " 下翻整屏(Forward)
20j " 精准下跳20行(数字+方向)
30k " 精准上跳30行(数字+方向)实战案例:快速审查函数
vim
1. [[ " 跳转到函数开头
2. v " 进入可视模式
3. % " 选中整个函数体
4. y " 复制函数
5. :vsp " 垂直分屏
6. p " 粘贴对比🚨 导航陷阱
- 标记覆盖:小写字母标记只在文件内有效,大写字母可跨文件
- 数字陷阱:100j ≠ 输入100后按j,需要先输入数字再按命令
- 屏幕抖动:频繁使用zz/zt可能导致视觉疲劳
- 代码依赖:gd需要ctags支持才能准确跳转