将 Vim 操作抽象成命令行指令,支持批量编辑文件。
- 符号定位 - 使用正则表达式跳转到匹配的行
- dry-run 模式 - 预览变更而不实际保存
- 范围操作 - 支持 vim 风格的范围命令
- AI 友好 - 结构化命令易于 AI 生成
# 复制到全局路径
sudo cp vimc /usr/local/bin/
# 或创建软链接
sudo ln -s $(pwd)/vimc /usr/local/bin/vimc# 基本用法
vimc file.txt ':10;ihello world'
# 符号定位
vimc file.py ':/def main/;idef new_func():\n pass'
# 范围操作
vimc file.txt ':3,5d'
# 预览模式
vimc --dry-run file.txt ':1;i# header'vimc [--dry-run] <filename> <commands>
--dry-run- 预览模式,不实际保存文件filename- 要编辑的文件路径commands- 编辑命令序列,用分号;分隔
| 命令 | 说明 | 示例 |
|---|---|---|
:n |
跳转到第 n 行 | :10 |
:/pattern/ |
跳转到匹配正则的行 | :/def foo/ |
| 命令 | 说明 | 示例 |
|---|---|---|
i内容 |
在当前行位置插入新行 | ihello |
a内容 |
在当前行后追加新行 | aworld |
dd |
删除当前行 | dd |
s/old/new/ |
替换当前行内容 | s/foo/bar/ |
p |
粘贴复制的内容 | p |
| 命令 | 说明 | 示例 |
|---|---|---|
:start,endd |
删除第 start 到 end 行 | :3,5d |
:start,ends/old/new/ |
范围内替换 | :1,10s/foo/bar/g |
:start,endy |
复制范围 | :1,3y |
:/p1/,/p2/d |
删除符号范围 | :/start/,/end/d |
使用 \n 插入多行:
vimc file.py ':1,iclass MyClass:\n def __init__(self):\n pass'# 在文件开头添加导入
vimc main.py ':1;iimport os\nimport sys'# 找到 def main 函数,在前面插入装饰器
vimc app.py ':/def main/;i@app.route("/")'# 删除第 10-20 行
vimc config.py ':10,20d'# 将前 5 行的 DEBUG = True 替换为 False
vimc settings.py ':1,5s/DEBUG = True/DEBUG = False/'# 复制第 1-2 行,粘贴到第 5 行后
vimc code.txt ':1,2y;:5;p'# 删除两个标记之间的所有行
vimc main.py ':/# START/,/# END/d'# 先预览,确认无误后再执行
vimc --dry-run important.txt ':1,s/foo/bar/'
vimc important.txt ':1,s/foo/bar/'# 跳转到第 10 行,删除,然后插入新内容
vimc file.txt ':10;dd;iNew content here'vimc 的命令格式设计考虑了 AI 生成:
# AI 可以轻松生成这样的命令序列
commands = ":1;iimport vimc;:/def main/;i@decorator;:5,10s/old/new/g"
# 执行
vimc file.py commands;(分号) - 分隔多个命令,(逗号) - 范围操作符的一部分
# 正确:用分号分隔命令
vimc file.txt ':10;dd'
# 错误:逗号被解析为范围
vimc file.txt ':10,dd' # 这会被解析为范围命令- 每次执行命令时,光标位置默认重置到第 1 行
- 使用跳转命令 (
:n或:/pattern/) 设置光标位置 - 编辑操作相对于当前光标位置执行
符号定位支持完整正则语法:
# 精确匹配
vimc file.py ':/^def foo/;i# before foo'
# 使用字符类
vimc file.py ':/class \w+:/;i# class decorator'
# 贪婪/非贪婪
vimc file.txt ':/foo.*?bar/d'- 读取:UTF-8
- 写入:UTF-8
- 换行符:保留原文件格式
- 撤销 - 不支持撤销操作,建议使用
--dry-run预览 - 寄存器 - 只有一个全局寄存器,后续复制会覆盖
- 大文件 - 一次性读取整个文件到内存
检查命令分隔符:
# 错误
vimc file.txt ':1,ihello'
# 正确
vimc file.txt ':1;ihello'使用简单模式或转义特殊字符:
# 可能失败
vimc file.py ':/def (foo/;i# comment'
# 正确
vimc file.py ':/def foo\(/;i# comment'确保范围语法正确:
# 错误
vimc file.txt ':3-5d'
# 正确
vimc file.txt ':3,5d'python3 test_vimc.pyvimc-prototype/
├── vimc # 主程序
├── test_vimc.py # 测试套件
├── ai_demo.py # AI 场景演示
└── README.md # 本文档
MIT
欢迎提交 Issue 和 Pull Request!