Vim 列操作命令完整学习笔记

发布于:2025-06-12 ⋅ 阅读:(30) ⋅ 点赞:(0)

Vim 列操作命令完整学习笔记

目录


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. 实用技巧和最佳实践

高效工作流程

  1. 预览选择:使用 Ctrl-v 先选择确认范围
  2. 小范围测试:在小范围内测试操作效果
  3. 撤销保护:记住 u 可以撤销操作
  4. 组合使用:结合其他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 → 编辑

性能优化技巧

  1. 大文件处理:分批处理,避免一次选择过多行
  2. 复杂操作:使用宏录制重复的列操作
  3. 正则表达式:结合 :g 命令进行条件列操作
  4. 寄存器利用:使用命名寄存器保存多个列数据

错误避免指南

  • 选择范围确认:操作前确认选择的列范围正确
  • 模式区分:理解块模式、字符模式、行模式的区别
  • Esc键重要性:插入操作后必须按Esc才能生效
  • 备份重要数据:复杂操作前先备份文件

10. 学习建议

循序渐进的学习路径

  1. 第一阶段:掌握基础块选择

    • 熟练使用 Ctrl-v 进入块模式
    • 练习基本的选择和移动操作
  2. 第二阶段:学习基础列操作

    • 掌握删除、复制、粘贴列操作
    • 练习插入和追加文本到列
  3. 第三阶段:学习norm命令

    • 理解 :norm 命令的批量操作原理
    • 练习行范围和模式匹配的组合
  4. 第四阶段:应用到实际场景

    • 在代码编辑中使用列操作
    • 处理数据文件和表格
  5. 第五阶段:高级技巧应用

    • 组合多种操作解决复杂问题
    • 自定义快捷键提高效率

实践建议

  1. 创建练习文件:准备各种格式的测试文件
  2. 日常应用:在实际工作中寻找列操作的机会
  3. 记录心得:记录常用的操作模式和技巧
  4. 分享交流:与其他Vim用户交流列操作经验

进阶学习方向

" 宏录制结合列操作
qa                      " 开始录制宏
Ctrl-v 选择 → 编辑操作   " 录制列操作
q                       " 停止录制
@a                      " 重复执行

" 插件增强
" 推荐插件:vim-multiple-cursors, vim-visual-multi
" 提供更强大的多光标编辑功能

📝 核心提示:Vim的列操作是其最独特的功能之一,熟练掌握后能够大幅提高处理结构化文本的效率。关键在于理解块选择的概念和norm命令的批量处理能力。


网站公告

今日签到

点亮在社区的每一天
去签到