Skip to content

foolgry/vimc-prototype

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vimc - Vim 命令行编辑器

将 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'

使用示例

1. 添加导入语句

# 在文件开头添加导入
vimc main.py ':1;iimport os\nimport sys'

2. 在函数前插入代码

# 找到 def main 函数,在前面插入装饰器
vimc app.py ':/def main/;i@app.route("/")'

3. 批量删除注释

# 删除第 10-20 行
vimc config.py ':10,20d'

4. 替换配置

# 将前 5 行的 DEBUG = True 替换为 False
vimc settings.py ':1,5s/DEBUG = True/DEBUG = False/'

5. 复制并重复代码

# 复制第 1-2 行,粘贴到第 5 行后
vimc code.txt ':1,2y;:5;p'

6. 删除代码块

# 删除两个标记之间的所有行
vimc main.py ':/# START/,/# END/d'

7. 预览变更

# 先预览,确认无误后再执行
vimc --dry-run important.txt ':1,s/foo/bar/'
vimc important.txt ':1,s/foo/bar/'

8. 组合操作

# 跳转到第 10 行,删除,然后插入新内容
vimc file.txt ':10;dd;iNew content here'

与 AI 结合

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
  • 换行符:保留原文件格式

限制

  1. 撤销 - 不支持撤销操作,建议使用 --dry-run 预览
  2. 寄存器 - 只有一个全局寄存器,后续复制会覆盖
  3. 大文件 - 一次性读取整个文件到内存

故障排除

命令不执行

检查命令分隔符:

# 错误
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.py

代码结构

vimc-prototype/
├── vimc           # 主程序
├── test_vimc.py   # 测试套件
├── ai_demo.py     # AI 场景演示
└── README.md      # 本文档

License

MIT

贡献

欢迎提交 Issue 和 Pull Request!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages