Vim 列操作命令完整学习笔记
Vim 列操作命令完整学习笔记
目录
文章目录
- Vim 列操作命令完整学习笔记
- 目录
- 1. 核心概念
- 2. 垂直块选择模式(Visual Block Mode)
- 2.1 进入和基础操作
- 2.2 选择范围控制
- 2.3 快速选择技巧
- 3. 列操作基础命令
- 3.1 删除和复制操作
- 3.2 插入和追加操作
- 3.3 替换操作
- 4. 列缩进和格式化
- 4.1 缩进操作
- 4.2 对齐操作
- 5. 批量编辑命令(norm命令)
- 5.1 基础批量操作
- 5.2 插入和追加批量操作
- 5.3 删除和替换批量操作
- 5.4 缩进批量操作
- 6. 高级列操作技巧
- 6.1 多列同时操作
- 6.2 不规则区域处理
- 6.3 数据对齐技巧
- 7. 实际应用场景
- 7.1 代码编辑场景
- 7.2 数据处理场景
- 7.3 文档编辑场景
- 8. 命令速查表
- 9. 实用技巧和最佳实践
- 高效工作流程
- 常用快捷键配置
- 复杂场景处理
- 性能优化技巧
- 错误避免指南
- 10. 学习建议
- 循序渐进的学习路径
- 实践建议
- 进阶学习方向
1. 核心概念
Vim 的列操作是其独有的强大功能,主要通过 垂直块选择模式(Visual Block Mode) 和 norm命令 实现。
核心特点:
- 矩形选择:可以选择文本的矩形区域,而不是整行
- 批量编辑:对多行的相同列位置同时进行操作
- 精确控制:可以精确到字符级别的列操作
两种主要方式:
- 可视块模式:
Ctrl-v
进入,直观的矩形选择 - norm命令:
:norm
命令,批量执行相同操作
2. 垂直块选择模式(Visual Block Mode)
2.1 进入和基础操作
-
Ctrl-v
- 进入垂直块选择模式 -
v
- 进入普通可视模式(字符选择) -
V
- 进入行可视模式(整行选择) -
Esc
- 退出可视模式
💡 模式区别:
Ctrl-v
选择矩形区域,v
选择字符流,V
选择整行
2.2 选择范围控制
-
Ctrl-v
+ j/k
- 垂直扩展选择(上下移动) -
Ctrl-v
+ h/l
- 水平扩展选择(左右移动) -
Ctrl-v
+ w
- 选择到下一个单词边界 -
Ctrl-v
+ 0
- 从光标位置选择到行首 -
Ctrl-v
+ $
- 从光标位置选择到行尾
2.3 快速选择技巧
-
Ctrl-v
+ 55G
- 从当前行到第55行选中一列 -
gg
+ Ctrl-v
+ 20G
- 从第一行到第20行选中列 -
Ctrl-v
+ G
- 从当前行到文件末尾选中列 -
Ctrl-v
+ }
- 选择到下一个段落 -
Ctrl-v
+ {
- 选择到上一个段落
3. 列操作基础命令
3.1 删除和复制操作
-
Ctrl-v
+ d
- 删除选中的列区域 -
Ctrl-v
+ y
- 复制选中的列区域 -
Ctrl-v
+ x
- 删除选中的列字符 -
Ctrl-v
+ p
- 粘贴到选中的列区域 -
Ctrl-v
+ P
- 在选中列前粘贴
3.2 插入和追加操作
-
Ctrl-v
+ I
+ <text>
+ Esc
- 在选中列前插入文本 -
Ctrl-v
+ A
+ <text>
+ Esc
- 在选中列后追加文本 -
Ctrl-v
+ c
+ <text>
+ Esc
- 替换选中列内容
📝 重要提示:插入和追加操作必须按
Esc
键才能生效到所有行
3.3 替换操作
-
Ctrl-v
+ r<char>
- 将选中列替换为指定字符 -
Ctrl-v
+ R
- 进入替换模式,替换选中区域 -
Ctrl-v
+ s
+ <text>
+ Esc
- 替换选中区域为新文本
4. 列缩进和格式化
4.1 缩进操作
-
Ctrl-v
+ >
- 将选中列向右缩进 -
Ctrl-v
+ <
- 将选中列向左缩进 -
Ctrl-v
+ 3>
- 将选中列向右缩进3个层级 -
Ctrl-v
+ 3<
- 将选中列向左缩进3个层级
4.2 对齐操作
-
Ctrl-v
+ =
- 自动缩进选中的代码块 -
Ctrl-v
+ gq
- 格式化选中的文本
5. 批量编辑命令(norm命令)
5.1 基础批量操作
-
:10,30norm I#
- 在第10-30行行首插入#
-
:10,30norm A;
- 在第10-30行行尾添加;
-
:1,$norm I//
- 给整个文件每行开头加注释//
-
:1,$norm A // todo
- 给所有行末尾加注释// todo
5.2 插入和追加批量操作
:10,30norm I# " 每行开头插入 #
:10,30norm A; " 每行末尾添加 ;
:1,$norm I// " 全文件行首加注释
:1,$norm A " comment " 全文件行尾加注释
:.,$norm I " 从当前行到末尾,每行开头加4个空格
5.3 删除和替换批量操作
:10,30norm ^xx " 每行开头删除两个字符
:10,30norm $x " 每行末尾删除一个字符
:10,30norm 0R- " 每行首字符替换为 -
:10,30norm rX " 每行当前位置字符替换为 X
:g/pattern/norm I# " 匹配行开头插入 #
5.4 缩进批量操作
:1,$norm >> " 整个文件向右缩进
:1,$norm << " 整个文件向左缩进
:10,30norm 0i " 第10-30行开头插入4个空格
:10,30norm 0i<Tab> " 第10-30行开头插入Tab
6. 高级列操作技巧
6.1 多列同时操作
" 选择多个不连续的列
Ctrl-v 选择第一列 → y 复制
移动到其他位置 → Ctrl-v 选择 → p 粘贴" 交替列操作
:g/^/norm 0i列A " 每行开头插入"列A"
:g/^/norm A列B " 每行末尾插入"列B"
6.2 不规则区域处理
" 处理不等长行
Ctrl-v + $ 选择到行尾 " 自动适应不同行长度
Ctrl-v + A 统一追加 " 在不等长行末尾统一追加" 跳过某些行
:g!/pattern/norm I# " 不匹配pattern的行插入#
:v/pattern/norm I# " 等价于上面的命令
6.3 数据对齐技巧
" CSV数据对齐
:%s/,/,\t/g " 逗号后加Tab
Ctrl-v 选择列 → = 对齐" 代码注释对齐
Ctrl-v 选择注释列 " 选择所有注释
A " 追加模式
输入空格调整对齐位置 " 手动对齐
7. 实际应用场景
7.1 代码编辑场景
批量注释/取消注释:
" 添加注释
Ctrl-v 选择多行开头 → I → // → Esc
:10,30norm I// " 命令行方式" 删除注释
Ctrl-v 选择注释符号 → d
:g/^\/\//norm 0xx " 删除开头的//
批量缩进调整:
" 代码块缩进
Ctrl-v 选择代码块 → > → > → > " 连续缩进
:10,30norm >>> " 缩进3级" 函数参数对齐
Ctrl-v 选择参数列 → A → 空格调整对齐
7.2 数据处理场景
CSV/TSV文件编辑:
" 添加列标题
1norm I"ID", " 第一行开头加ID列
:2,$norm I"", " 数据行开头加空值" 列数据转换
Ctrl-v 选择价格列 → c → $0.00 → Esc " 统一货币格式
表格数据整理:
" 表格边框添加
:g/^/norm I| " 每行开头加|
:g/^/norm A| " 每行末尾加|" 数据填充
Ctrl-v 选择空列 → c → N/A → Esc " 填充空值
7.3 文档编辑场景
列表格式化:
" 有序列表
:g/^/norm I1. " 开头加序号(需要手动调整)
:1,$norm 0R1. " 第一行用1.替换开头" 无序列表
:g/^/norm I- " 开头加破折号
:g/^/norm I• " 开头加项目符号
文档结构调整:
" 章节编号
:g/^#/norm A " (Draft) " 给所有标题加Draft标记
:g/^##/norm I2. " 给二级标题加编号
8. 命令速查表
命令 | 功能 | 备注 |
---|---|---|
Ctrl-v | 进入垂直块选择模式(Visual Block Mode) | 开始选择一个矩形区域的文本,按列选取 |
v (视觉模式) | 进入普通的可视模式,按字符选择 | 按行或字符选择 |
Ctrl-v +j/k | 在垂直模式下上下扩展选择区域 | 用于扩展选中的列范围 |
Ctrl-v +w | 在垂直模式下选择到下一个单词边界 | 按列选择单词边界 |
Ctrl-v +0 | 从当前光标位置到行首选择 | 在列选择模式下选择到行首 |
Ctrl-v +$ | 从当前光标位置到行尾选择 | 在列选择模式下选择到行尾 |
命令 / 命令组合 | 功能 | 备注说明 | 详细示例 |
---|---|---|---|
Ctrl-v + d | 删除选中的列区域(块模式下) | 删除垂直区域内的内容 | 在 Visual Block Mode 下,选中某一列(如C列 ),按d 删除该列内容。 |
Ctrl-v + y | 复制选中的列区域(块模式下) | 复制垂直区域内的内容 | 在 Visual Block Mode 下,选中某一列(如C列 ),按y 复制该列内容。 |
Ctrl-v + p | 粘贴到选中的列区域 | 将复制的列粘贴到选中的列范围内 | 复制C列 后,选中目标列(如E列 ),按p 粘贴到E列 。 |
Ctrl-v + I <text> + Esc | 插入文本到选中列前方 | 每行的对应列插入<text> | 选中多行某列后按I 输入文本A ,再按Esc ,所有行的该列前插入文本A 。 |
Ctrl-v + A <text> + Esc | 追加文本到选中列后方 | 每行的对应列后追加<text> | 选中多行某列后按A 输入-结束 ,再按Esc ,所有行该列末尾追加-结束 。 |
Ctrl-v + x | 删除选中的列字符 | 删除块选中区域的字符 | 选中C列 后按x 删除所选列的字符。 |
Ctrl-v + r<char> | 替换选中列为指定字符 | 用rX 替换为字符X | 选中C列 后按rX ,将该列所有字符替换为X 。 |
Ctrl-v + > | 将选中列向右缩进 | 缩进块区域 | 选中多行某列,按> 整体右移缩进,缩进个TAB,按n + >。 |
Ctrl-v + < | 将选中列向左缩进 | 缩进块区域 | 选中多行某列,按< 整体左移缩进,缩进个TAB,按n + <。 |
Ctrl-v + 55G | 从当前行到第55行选中一列 | 快速选中某列的垂直区域 | 在当前列按Ctrl-v ,再输入55G ,选中当前列到第 55 行。 |
gg + Ctrl-v + 20G | 从第一行到第20行选中列 | 批量选择顶部行的一列 | 首先按gg 到第一行,再进入 Visual Block,按20G 选中第 1~20 行的一列。 |
:10,30norm I# | 在第10~30行行首插入# | 非视觉模式下的批量编辑,适合注释或缩进 | 用:norm 命令对第 10 到 30 行每一行开头插入# ::10,30norm I# 。 |
Ctrl-v + r<char> | 替换选中列内容 | 替换选中的字符为指定的字符 | 在 Visual Block Mode 下,选中某一列,按rX ,将选中的字符替换为X 。 |
命令 | 功能 | 示例说明 |
---|---|---|
:10,30norm I# | 每行行首插入# | 批量注释第 10~30 行(相当于每行开头输入# ) |
:10,30norm A // todo | 每行行尾追加 // todo | 在第 10~30 行末尾追加注释// todo |
:1,$norm I// | 给整个文件行首加// | 快速批量注释整个文件(1,$ 表示全文件) |
:1,$norm A; | 给所有行末加分号; | 常用于 C、JavaScript 等需要行尾分号的语言 |
:10,30norm ^xx | 每行开头删除两个字符 | ^ 表示行首,x 删除字符 |
:10,30norm $x | 每行行尾删除一个字符 | $ 到行尾,x 删除一个字符 |
:10,30norm 0R- | 每行首用- 替换当前字符 | 0 到行首,R 进入替换模式,替换成- |
:10,30norm rX | 替换每行当前光标处字符为X | 将光标处字符批量替换为X |
:1,$norm >> | 批量缩进整个文件 | 执行>> ,即 Vim 内建缩进 |
:1,$norm << | 批量取消缩进整个文件 | 执行<< ,即 Vim 内建取消缩进 |
9. 实用技巧和最佳实践
高效工作流程
- 预览选择:使用
Ctrl-v
先选择确认范围 - 小范围测试:在小范围内测试操作效果
- 撤销保护:记住
u
可以撤销操作 - 组合使用:结合其他Vim命令提高效率
常用快捷键配置
" .vimrc 中的实用配置
" 快速列选择
nnoremap <leader>v <C-v>" 快速列操作
vnoremap <leader>i I
vnoremap <leader>a A" 快速注释
nnoremap <leader>c :norm I// <CR>
nnoremap <leader>u :norm 0xxx<CR>" 列对齐
vnoremap <leader>= =
复杂场景处理
" 处理混合数据格式
:g/pattern1/norm I[TODO] " 特定行加标记
:v/pattern1/norm I[DONE] " 其他行加标记" 条件列操作
:g/^function/norm A { " 函数行末尾加大括号
:g/^}/norm o " 右括号后加空行" 多步骤列编辑
Ctrl-v 选择 → y → 移动 → Ctrl-v 选择 → p → 编辑
性能优化技巧
- 大文件处理:分批处理,避免一次选择过多行
- 复杂操作:使用宏录制重复的列操作
- 正则表达式:结合
:g
命令进行条件列操作 - 寄存器利用:使用命名寄存器保存多个列数据
错误避免指南
- 选择范围确认:操作前确认选择的列范围正确
- 模式区分:理解块模式、字符模式、行模式的区别
- Esc键重要性:插入操作后必须按Esc才能生效
- 备份重要数据:复杂操作前先备份文件
10. 学习建议
循序渐进的学习路径
-
第一阶段:掌握基础块选择
- 熟练使用
Ctrl-v
进入块模式 - 练习基本的选择和移动操作
- 熟练使用
-
第二阶段:学习基础列操作
- 掌握删除、复制、粘贴列操作
- 练习插入和追加文本到列
-
第三阶段:学习norm命令
- 理解
:norm
命令的批量操作原理 - 练习行范围和模式匹配的组合
- 理解
-
第四阶段:应用到实际场景
- 在代码编辑中使用列操作
- 处理数据文件和表格
-
第五阶段:高级技巧应用
- 组合多种操作解决复杂问题
- 自定义快捷键提高效率
实践建议
- 创建练习文件:准备各种格式的测试文件
- 日常应用:在实际工作中寻找列操作的机会
- 记录心得:记录常用的操作模式和技巧
- 分享交流:与其他Vim用户交流列操作经验
进阶学习方向
" 宏录制结合列操作
qa " 开始录制宏
Ctrl-v 选择 → 编辑操作 " 录制列操作
q " 停止录制
@a " 重复执行" 插件增强
" 推荐插件:vim-multiple-cursors, vim-visual-multi
" 提供更强大的多光标编辑功能
📝 核心提示:Vim的列操作是其最独特的功能之一,熟练掌握后能够大幅提高处理结构化文本的效率。关键在于理解块选择的概念和norm命令的批量处理能力。