用Vim当命令行工具替换内容


用AutoHotkey做文件内容处理一般是如下步骤:

  1. 读取文件内容到变量str
  2. 修改str变量
  3. 删除原文件,并FileAppend(str, fp)

这个步骤不复杂,但是需要考虑其他因素

  1. 原文件编码类型,否则读取会有问题
  2. 原文件分行为DOS还是UNIX
  3. 有些情况,还要考虑是否有BOMB选项

基于以上情况,个人比较偏向用文本处理工具来打开文件,修改后直接保存,不管编码。
于是就折腾了Vim的命令行参数
gvim.exe -e -s -u NONE -c "set nobackup noswapfile nowritebackup encoding=utf-8" -c "%s/reg/new/g" -c wq c:\1.txt
其中要修改的是3处

  1. reg是查找内容,注意\符号需要转义成\\如果有中文就不好用了,暂时还没解决
  2. new是替换内容,如果有中文需要用\='abc'.nr2char(numOrd)形式转成表达式,也有点麻烦
  3. c:\1.txt是文件路径

另个用sed,只是小试了下,路径的表达方式要注意
sed.exe -i 's/reg/new/g' /c/1.txt