================================================================================
Vim 高级使用技巧指南
================================================================================
目录:
1. 导航与移动
2. 编辑操作
3. 搜索与替换
4. 宏录制
5. 窗口与标签页管理
6. 寄存器操作
7. 可视化模式
8. 标记与跳转
9. 自动补全
10. 插件管理
11. 自定义配置
12. 调试与诊断
13. 高效工作流
================================================================================
1. 导航与移动
================================================================================
基本移动增强:
- w/W : 移动到下一个单词开头(W忽略标点)
- b/B : 移动到上一个单词开头
- e/E : 移动到单词结尾
- {n}w : 向前移动n个单词
- Ctrl+o : 跳转到之前的位置(后退)
- Ctrl+i : 跳转到之后的位置(前进)
- gd : 跳转到光标下变量的定义处
- gD : 跳转到全局变量定义
行内快速移动:
- f{char} : 查找并移动到当前行的字符
- F{char} : 反向查找字符
- t{char} : 移动到字符前一个位置
- T{char} : 反向移动到字符后
- ; : 重复上次的f/F/t/T查找
- , : 反向重复查找
段落与块移动:
- { : 移动到上一段开头
- } : 移动到下一段开头
- [[ : 移动到上一个函数/块开头
- ]] : 移动到下一个函数/块开头
屏幕滚动:
- Ctrl+e : 向下滚动一行
- Ctrl+y : 向上滚动一行
- Ctrl+d : 向下滚动半屏
- Ctrl+u : 向上滚动半屏
- Ctrl+f : 向下滚动一屏
- Ctrl+b : 向上滚动一屏
- zz : 将当前行居中显示
- zt : 将当前行置于顶部
- zb : 将当前行置于底部
================================================================================
2. 编辑操作
================================================================================
高效删除:
- d{motion} : 删除指定范围(如dw, d$, d2j)
- D : 删除到行尾
- c{motion} : 更改指定范围(删除并进入插入模式)
- C : 更改到行尾
- x/X : 删除光标处/前一个字符
- dd : 删除整行
- {n}dd : 删除n行
复制与粘贴:
- y{motion} : 复制指定范围
- yy : 复制整行
- Y : 复制整行(同yy)
- p/P : 在光标后/前粘贴
- gp : 粘贴并将光标移到粘贴文本末尾
撤销与重做:
- u : 撤销
- Ctrl+r : 重做
- U : 恢复整行
重复操作:
- . : 重复上次修改操作
- {n}. : 重复n次
多行编辑:
- Ctrl+v : 进入可视块模式,选择多行后进行操作
- I : 在可视块模式每行开头插入
- A : 在可视块模式每行末尾追加
- c : 在可视块模式更改选中内容
括号匹配:
- % : 跳转到匹配的括号/引号
- [{ : 跳转到未匹配的{
- [( : 跳转到未匹配的(
- [quote : 跳转到未匹配的引号
================================================================================
3. 搜索与替换
================================================================================
基本搜索:
- /pattern : 向前搜索
- ?pattern : 向后搜索
- n/N : 下一个/上一个匹配
- * : 搜索光标下的单词
- # : 反向搜索光标下的单词
- g* : 搜索部分匹配
搜索选项:
- :set hlsearch : 高亮搜索结果
- :set nohlsearch : 取消高亮
- :set ignorecase : 忽略大小写
- :set smartcase : 智能大小写(有大写时区分)
- :set incsearch : 增量搜索
正则表达式搜索:
- /\v : 启用非常魔法模式(简化正则)
- . : 任意字符
- * : 零个或多个
- + : 一个或多个
- \s : 空白字符
- \d : 数字
- [a-z] : 字符范围
替换操作:
- :s/old/new : 替换当前行第一个匹配
- :s/old/new/g : 替换当前行所有匹配
- :%s/old/new/g : 替换整个文件
- :%s/old/new/gc : 替换并确认每个匹配
- :{range}s/old/new/g : 替换指定范围
高级替换技巧:
- :%s/\(.*\)/\1/g : 使用捕获组
- :%s/^/prefix/ : 每行添加前缀
- :%s/$/suffix/ : 每行添加后缀
- :g/pattern/d : 删除包含pattern的行
- :v/pattern/d : 删除不包含pattern的行
================================================================================
4. 宏录制
================================================================================
录制宏:
- q{register} : 开始录制宏到寄存器(如qa)
- q : 停止录制
- @{register} : 执行宏(如@a)
- @@ : 重复执行上次宏
- {n}@{reg} : 执行宏n次
宏编辑:
- :@{register} : 查看宏内容
- "ap : 粘贴宏内容进行编辑
- "ay$ : 保存编辑后的宏
实用宏示例:
- 批量格式化:录制一次格式化操作,然后应用到多行
- 代码重构:录制变量重命名序列
- 数据处理:录制CSV字段提取操作
================================================================================
5. 窗口与标签页管理
================================================================================
分割窗口:
- :split : 水平分割
- :vsplit : 垂直分割
- Ctrl+w s : 水平分割
- Ctrl+w v : 垂直分割
- Ctrl+w c : 关闭窗口
- Ctrl+w o : 关闭其他窗口
- Ctrl+w q : 退出当前窗口
窗口导航:
- Ctrl+w h/j/k/l : 切换到左/下/上/右窗口
- Ctrl+w w : 循环切换窗口
- Ctrl+w p : 切换到之前窗口
调整窗口大小:
- Ctrl+w + : 增加高度
- Ctrl+w - : 减少高度
- Ctrl+w > : 增加宽度
- Ctrl+w < : 减少宽度
- Ctrl+w = : 均衡窗口大小
标签页:
- :tabnew : 新建标签页
- :tabedit file : 在新标签页打开文件
- gt/gT : 下一个/上一个标签页
- {n}gt : 切换到第n个标签页
- :tabclose : 关闭当前标签页
- :tabonly : 关闭其他标签页
- :tabs : 列出所有标签页
预览窗口:
- :pedit file : 在预览窗口打开文件
- Ctrl+w } : 在预览窗口显示光标下符号的定义
- :pclose : 关闭预览窗口
================================================================================
6. 寄存器操作
================================================================================
寄存器类型:
- "" : 无名寄存器(默认)
- "0-"9 : 数字寄存器(最近删除/复制的内容)
- "a-z : 小写字母寄存器(用户自定义)
- "A-Z : 大写字母寄存器(追加到对应小写寄存器)
- "- : 小黑洞寄存器(单次删除)
- "* : 系统剪贴板(需要+clipboard支持)
- "+ : 系统剪贴板(同上)
- ". : 最后插入的文本
- "% : 当前文件名
- ": : 最后执行的命令
- "/ : 最后搜索的模式
寄存器操作:
- "{reg}y : 复制到指定寄存器
- "{reg}p : 从指定寄存器粘贴
- "{reg}d : 删除到指定寄存器
- :registers : 查看所有寄存器内容
- :reg {regs} : 查看指定寄存器
实用技巧:
- 使用不同寄存器保存多个片段,避免覆盖
- 用大写寄存器追加内容:"Ap追加到寄存器a
- 使用系统剪贴板:"+y复制到系统,"+p从系统粘贴
================================================================================
7. 可视化模式
================================================================================
三种可视模式:
- v : 字符可视模式
- V : 行可视模式
- Ctrl+v : 块可视模式
可视模式操作:
- o/O : 切换选择区域的起点和终点
- gv : 重新选择上次可视区域
- ESC : 退出可视模式
块可视模式高级用法:
- 选择矩形区域后进行统一编辑
- I在每行开头插入,A在每行末尾追加
- c替换选中块,r用单个字符替换
- y复制块,d删除块
列编辑示例:
1. Ctrl+v进入块模式
2. 选择多行的同一列
3. 按I输入内容
4. 按ESC应用到所有行
================================================================================
8. 标记与跳转
================================================================================
设置标记:
- m{a-z} : 设置局部标记(文件内)
- m{A-Z} : 设置全局标记(跨文件)
跳转到标记:
- '{mark} : 跳转到标记所在行
- `{mark} : 跳转到标记精确位置
- '' : 跳转到上次跳转前的位置
- `. : 跳转到上次修改的位置
标记列表:
- :marks : 显示所有标记
- :marks a-z : 显示指定范围的标记
特殊标记:
- '' : 上次跳转位置
- `. : 上次修改位置
- '^ : 上次插入后光标位置
- '[ : 上次修改/复制的开始
- '] : 上次修改/复制的结束
================================================================================
9. 自动补全
================================================================================
补全模式:
- Ctrl+n : 关键字补全(下一个)
- Ctrl+p : 关键字补全(上一个)
- Ctrl+x Ctrl+f : 文件名补全
- Ctrl+x Ctrl+l : 整行补全
- Ctrl+x Ctrl+k : 字典补全
- Ctrl+x Ctrl+] : 标签补全
- Ctrl+x Ctrl+i : 包含文件补全
- Ctrl+x Ctrl+d : 宏定义补全
Omni补全:
- Ctrl+x Ctrl+o : Omni补全(需要语言支持)
补全导航:
- 在补全菜单中:Ctrl+n/p上下选择
- Enter或Ctrl+y : 接受当前选项
- Ctrl+e : 取消补全
================================================================================
10. 插件管理
================================================================================
流行插件管理器:
- vim-plug : 轻量级,易于使用
- Vundle : 老牌插件管理器
- Pathogen : 简单但功能有限
vim-plug使用:
1. 安装vim-plug
2. 在.vimrc中添加:
call plug#begin('~/.vim/plugged')
Plug 'author/plugin-name'
call plug#end()
3. 运行:PlugInstall安装插件
推荐插件类别:
- 文件导航:NERDTree, vim-finder
- 代码补全:YouCompleteMe, coc.nvim
- 语法检查:ALE, Syntastic
- Git集成:vim-fugitive
- 模糊搜索:ctrlp.vim, fzf.vim
- 代码注释:nerdcommenter
- 括号匹配:vim-surround
================================================================================
11. 自定义配置
================================================================================
.vimrc基础配置:
" 基本设置
set number " 显示行号
set relativenumber " 相对行号
set showmode " 显示模式
set showcmd " 显示命令
set cursorline " 高亮当前行
set hlsearch " 高亮搜索
set incsearch " 增量搜索
set ignorecase " 忽略大小写
set smartcase " 智能大小写
" 缩进设置
set tabstop=4
set shiftwidth=4
set expandtab " 用空格代替tab
set autoindent " 自动缩进
set smartindent " 智能缩进
" 编码设置
set encoding=utf-8
set fileencoding=utf-8
" 备份和交换文件
set backup " 启用备份
set backupdir=~/.vim/backup
set directory=~/.vim/swap
set undofile " 持久化撤销
" 状态栏
set laststatus=2 " 始终显示状态栏
set statusline=%f%m%r%h%w%=%l,%c%V%P
" 快捷键映射
nnoremap <C-s> :w<CR> " Ctrl+s保存
inoremap jj <Esc> " jj退出插入模式
nnoremap <leader>w :w<CR> " leader+w保存
折叠设置:
set foldmethod=syntax " 基于语法的折叠
set foldlevel=99 " 默认展开所有折叠
zo " 打开折叠
zc " 关闭折叠
zR " 打开所有折叠
zM " 关闭所有折叠
================================================================================
12. 调试与诊断
================================================================================
内置调试:
- :scriptnames : 显示已加载的脚本
- :version : 显示Vim版本和特性
- :messages : 显示消息历史
- :echo : 输出表达式值
- :echom : 输出并记录消息
性能分析:
- :profile start profile.log
- 执行要分析的操作
- :profile stop
- 查看profile.log分析瓶颈
常见问题排查:
- :set verbose=9 : 增加详细输出
- :checkhealth : Neovim健康检查
- vim --clean : 无配置启动测试
日志查看:
- ~/.vim/log : Vim日志(如果配置)
- dmesg | grep vim : 系统级错误
================================================================================
13. 高效工作流
================================================================================
快速文件操作:
- :e {file} : 编辑文件
- :bn/:bp : 下一个/上一个缓冲区
- :ls : 列出缓冲区
- :b {n} : 切换到第n个缓冲区
- :bd : 删除缓冲区
会话管理:
- :mksession : 保存会话
- :source Session.vim : 恢复会话
项目导航:
- :grep pattern * : 项目中搜索
- :copen : 打开quickfix窗口
- :cn/:cp : 下一个/上一个结果
编译与运行:
- :make : 执行make
- :copen : 查看编译错误
- :cn : 跳到下一个错误
终端集成(Neovim/Vim 8+):
- :terminal : 打开终端
- Ctrl+w N : 进入终端正常模式
- i : 返回终端插入模式
远程编辑:
- vim scp://user@host/path/file
- vim ftp://host/path/file
================================================================================
高级组合技巧
================================================================================
1. 链式操作:
- dw. : 删除一个单词并重复
- ci"'text" : 更改引号内内容为"text"
- dap : 删除一个段落
2. 文本对象:
- iw : 内部单词
- aw : 包含空格的单词
- is : 内部句子
- as : 包含空格的句子
- ip : 内部段落
- ap : 包含空格的段落
- i( / a( : 圆括号内/包含括号
- i[ / a[ : 方括号内/包含括号
- i{ / a{ : 花括号内/包含括号
- i" / a" : 双引号内/包含引号
- i' / a' : 单引号内/包含引号
3. 过滤器:
- !{command} : 过滤选中文本通过命令
- :%!sort : 排序整个文件
- :%!uniq : 去重
- :%!jq . : JSON格式化
4. 外部命令:
- :!{command} : 执行外部命令
- :read !{cmd} : 读取命令输出到文件
- :write !{cmd} : 将文件内容传给命令
5. 快速修复:
- gf : 打开光标下的文件名
- gx : 打开光标下的URL
- K : 查看man手册
================================================================================
学习资源
================================================================================
内置帮助:
- :help : 主帮助
- :help {topic} : 特定主题帮助
- :helpgrep pattern : 在帮助中搜索
在线资源:
- vimcasts.org : Vim视频教程
- vimawesome.com : Vim插件集合
- Reddit r/vim : Vim社区
练习网站:
- openvim.com : 交互式Vim教程
- vim-adventures.com : Vim游戏
- hackerrank vim challenges
书籍推荐:
- 《Practical Vim》by Drew Neil
- 《Learning the vi and Vim Editors》
- 《Modern Vim》by Drew Neil
================================================================================
提示:将常用技巧添加到.vimrc中,逐步建立自己的工作流。
定期回顾和实践新技巧,形成肌肉记忆。
================================================================================