gvim中多个文件中的列编辑

时间:2019-03-17 13:21:40

标签: vim scripting

我是脚本的新手,我想在gvim中的生成文件中进行列编辑。

问题是我知道如何在单个文件中执行此操作(通过在gvim中进入可视块模式),但是我必须对多个文件进行相同的编辑,并且无法打开每个文件并执行所需的操作每个文件中的操作。

是否有任何脚本语言提供了这样做的方法?

编辑1:我必须用另一文本替换整个列。

2 个答案:

答案 0 :(得分:0)

设置输入和输出示例非常好,但是现在我会提出类似的内容:

"TemplateData": `{ \"subject\": \"${createdData.subject}\", \"date\": \"${createdData.date}\", \"header\": \"${createdData.header}\", \"message\": \"${createdData.message}\" }`

答案 1 :(得分:0)

请尝试备份您的文件

很难描述文件内容,但假设它是用空格分隔的文件,则可以使用vim来更改第一列(每行的第一个单词),而无需手动操作打开每个文件,请从shell提示符中尝试以下操作:

for fname in * ; do vim -N -c ":%s/\v^\w+/NEWTEXT/g|:wq" "${fname}" ; done

其中:

  • *是Shell Glob,表示“所有文件”。如果您的文件不位于单独的目录中,或者您不想影响所有文件,请提供for fname in file1 file2 file3...
  • 之类的列表
  • NEWTEXT是替代文本。
  • -c在启动时执行vim命令
  • :vim中进入命令模式
  • %使整个文件成为操作的对象
  • s/REGEXP/SUBSTITUTION/g表示在所有与REGEX匹配的字符串中插入SUBSTITUTION
  • \v使vim正则表达式中的转义符和特殊字符的行为类似于POSIX正则表达式。
  • ^的意思是“从行首”
  • \w的意思是“任何单词字符”
  • +的意思是“前面的一个或多个字符”
  • |分隔vim个命令(不是 一个Shell管道)
  • :wq保存更改的文件并退出vim

以这种方式使用vim可能不是最好的主意。 考虑使用改为sed

for fname in * ; do 
  sed -ir "s/^\w+/NEWTEXT/g" "${fname}"
done

-r标志告诉sed使用正则表达式 -i告诉它在适当的位置更改文件,即不需要输出重定向。