vim列编辑(ctrl+v)可高效批量格式化/etc/hosts:先列选区域,按i插入前缀(如#或ip)后双esc广播,按x/c/r进行列删/替/单字符替换,并配合行号、标记和对齐命令提升精度。

在 Linux 中用 Vim 对 /etc/hosts 这类结构化文本做批量格式化,列编辑(Visual Block Mode)是最直接高效的方式。它不依赖正则或脚本,纯键盘操作,几秒内完成几十行对齐、注释、补前缀等动作,特别适合运维和开发中反复调整 hosts 的场景。
进入列块模式并精准选区
列编辑的核心是「按列选中」,不是按行或按字。操作路径清晰:
- 先用
gg或数字跳转到目标起始行(比如第 3 行),将光标移到该行最左侧(用^快速跳到行首) - 按下
Ctrl + v—— 屏幕左下会显示-- VISUAL BLOCK --,表示已进入列块模式 - 用方向键或
j/k向下/向上拖选,覆盖你想操作的所有行(如从第 3 行到第 12 行) - 若需横向选中固定列宽(例如只选中每行前 10 列),可用
或 <code>>配合方向键微调,或直接按l向右扩展一列
批量插入统一前缀(如注释或 IP 占位)
这是 hosts 文件最常用操作:给多行加 # 注释,或统一补上 127.0.0.1。
- 选中目标列区域后,按大写
I(Insert at line start of block)—— 注意此时只有首行显示输入光标,属正常现象 - 输入要插入的内容,例如
#(井号+空格)或127.0.0.1\t(可用Tab输入制表符对齐) - 输完后必须连按两次
Esc:第一次退出插入状态,第二次才真正将内容广播到所有选中行 - 效果立现:所有被选中的行,都在同一列位置添加了完全一致的前缀
批量删除或替换固定列内容
适用于清理旧注释、统一替换域名、对齐缩进等。
- 同样用
Ctrl + v选中待删/替的列区域(例如所有行开头的#,或第 15–25 列的旧域名) - 按
x直接删除整列选区;或按c进入替换模式,输入新内容后双Esc - 若要替换为固定字符串(如把所有
dev.换成stg.),但只作用于某列范围,可先列选,再按s删除并立即输入新内容 - 注意:列选后按
r可实现“列内单字符替换”,例如选中一列字母后按r0,就把整列都变成0
结合行号与标记提升操作精度
面对长 hosts 文件(上百行),靠目视选区易出错。建议组合使用以下技巧:
- 先执行
:set nu显示行号,明确起止行(如:3,15区间) - 用
ma在起始行打标记a,mb在结束行打标记b,之后用<c-v>'a'b</c-v>快速列选两标记间全部内容 - 若需对齐 IP 和域名(常见需求),可先列选所有域名列(如从第 20 列开始),按
>右移一次自动补空格对齐;或列选后按:normal A <space></space>统一在末尾加空格 - 操作前可
:w! /tmp/hosts.bak快速备份,避免误操作不可逆











