将yaml格式(缩进)从一个文件复制到另一个文件

时间:2013-12-04 18:08:16

标签: format yaml indentation transformation textmate

翻译者通过将所有内容复制到单词中来完全弄乱了yaml文件(不要问)。

我已经使用正则表达式清理了文件,但现在缺少缩进(间距);一切都从第一个字符开始:

es:
default_blocks:
thank_you_html: "thank you text"

而不是

en:
  default_blocks:
    thank_you_html: "thank you text"

您是否知道如何自动将格式/结构/缩进从正确的文件(例如en.yml)复制到损坏的文件(例如es.yml)? (我使用textmate 2.0作为编辑器)

谢谢!

1 个答案:

答案 0 :(得分:0)

假设原始和翻译每行包含完全相同的字符串(缩进问题除外),扫描前导空格的快速和脏脚本可以解决这个问题:

#!/usr/bin/env ruby
# encoding: UTF-8

indented = File.readlines(ARGV[0]).map do |l|
  l.scan(/^\s+/)[0]
end.zip(File.readlines(ARGV[1])).map { |e| e.join }.join

File.open(ARGV[1], "w") { |io| io.write(indented) }

保存,使其可执行并调用

./script_name.rb en.yml es.yml

如果这不是常规任务,不会弄乱Textmate,但是您可以轻松地将其转换为命令,并通过对话框提示输出两个文件,或者在文件浏览器中选择两个文件,在其中打开其中一个当前选项卡并通过环境变量区分它们($ TM_FILEPATH,$ TM_SELECTED_FILES)