Skip to content

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避坑指南

  1. 模式混淆:忘记退出插入模式直接输入命令(按 Esc 返回普通模式)
  2. 寄存器陷阱:未指定寄存器时使用默认寄存器(小心覆盖重要内容)
  3. 计数灾难:误输入数字导致重复操作(如 100dd 会删除100行)
  4. 可视化选择:块选择后直接输入会修改所有选中行
  5. 插件冲突:多个插件同时修改相同快捷键

💡 生存小贴士

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>

🚨 高阶警告

  1. 递归宏陷阱:录制宏时避免包含宏调用指令
  2. 全局替换风险:始终先测试再使用s//g,可先加c确认
  3. 缓冲区泄漏:长期未保存的缓冲区可能丢失数据
  4. 插件冲突:相似功能的插件可能互相干扰
  5. 正则回溯:复杂正则可能导致性能问题

💡 终极生存技巧

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        " 粘贴对比

🚨 导航陷阱

  1. 标记覆盖:小写字母标记只在文件内有效,大写字母可跨文件
  2. 数字陷阱:100j ≠ 输入100后按j,需要先输入数字再按命令
  3. 屏幕抖动:频繁使用zz/zt可能导致视觉疲劳
  4. 代码依赖:gd需要ctags支持才能准确跳转