V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
proxychains
V2EX  ›  问与答

yml 这种缩进语法好烦...

  •  
  •   proxychains · 94 天前 · 3392 次点击
    这是一个创建于 94 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在考 ansible. playbook 流程控制理解起来没啥问题. 这种缩进语法真的是... 给我整自闭了.

    54 条回复    2022-12-26 12:09:13 +08:00
    xiaoz
        1
    xiaoz  
       94 天前 via Android
    稍有不慎就报错,哈哈。我也觉得这种写法不太友好。尤其是复制粘贴的时候。
    dcsuibian
        2
    dcsuibian  
       94 天前
    你用的啥编辑器
    dzdh
        3
    dzdh  
       94 天前
    @dcsuibian ubuntu 默认的 nano
    dzdh
        4
    dzdh  
       94 天前
    为啥 yaml 这么受推崇呢
    dcsuibian
        5
    dcsuibian  
       94 天前
    @dzdh 换用其它编辑器试试,比如 vscode 或者 vim 也行,给程序员用的缩进都不会有啥问题,按
    sdk234
        6
    sdk234  
       94 天前 via Android
    习惯问题。我特别喜欢这种缩进语法,看着很舒服。😂
    lambdaq
        7
    lambdaq  
       94 天前
    @dzdh 容易出错,所以创造就业机会。。yaml boy
    Track13
        8
    Track13  
       94 天前 via Android
    想起以前用 hexo 搭博客,因为 yaml 的缩进,一个问题卡一天。😢
    also24
        9
    also24  
       94 天前 via Android   ❤️ 1
    很多人好像都没有意识到 yaml 是可以用括号的…
    majula
        10
    majula  
       94 天前   ❤️ 1
    众所周知 yaml 是 json 的超集

    不习惯的话写 json 就好了(
    dcsuibian
        11
    dcsuibian  
       94 天前
    xml-->json-->yaml 。我觉得 yaml 挺好的。

    XML 应该算老前辈了,配合 dtd 和 ide 写起来也很舒服。但总体来说确实复杂,文件庞大。

    JSON 相比于 xml 精简了很多,而且其中的几种类型:数字、布尔、字符串、null 、对象(键值对)、数组(列表)。这些类型在其它语言里有对应。
    但做配置不合适,因为 json 更多是为数据交换考虑的,语法严格(比如必须双引号、不能有多余的逗号),不允许有注释。这对解析器友好,但对手写的配置文件就不一样了。

    yaml 的话,算是 JSON 的超集,我基本那它当一个更好写的 JSON 。JSON 的数据类型它都有,但写起来更方便舒服。

    另外.properties 、.ini 就不说了,觉得不怎么样。
    paradox8599
        12
    paradox8599  
       94 天前 via Android   ❤️ 2
    有人用 toml 的吗?感觉也还不错
    enchilada2020
        13
    enchilada2020  
       94 天前 via Android   ❤️ 1
    @paradox8599 感觉还不如 yaml 。。
    singerll
        14
    singerll  
       94 天前 via Android
    想在服务器上临时改个参数,经常 vim 敲完报错,还得切 vsc 之类的编辑器。。。
    lucifer9
        15
    lucifer9  
       94 天前 via iPhone   ❤️ 1
    说的就跟真手写配置文件似的
    还不是都复制一下改改
    想想看是多删了一个括号好查出来
    还是多删了个空格好查出来?
    chih758
        16
    chih758  
       94 天前 via Android
    你可以用 jsonnet 写😉
    wangxiaoaer
        17
    wangxiaoaer  
       94 天前   ❤️ 3
    你说这些配置文件,一届一届换了多少种格式了,改过吗?换汤不换药啊!
    你 spring 、hexo 都在用 yaml 了,能用,但是快不了!出个缩进问题就卡半天,没这个能力知道吗?
    再下去就要换 toml ,再不行就换魔改 dsl ,接下来没啥可换的啦。
    Json 用的蛮好的,你把他换了干什么?
    IvanLi127
        18
    IvanLi127  
       94 天前 via Android
    数据结构不复杂的话,用 yaml 比 json 好太多了。复杂的话缩进是有点乱,不过 json 也一样吧。。。少写个花括号不也是很要命。我反正很喜欢 yaml ,不过写配置的话,我更喜欢 toml
    isnullstring
        19
    isnullstring  
       94 天前
    看着头大,ini 直观些,哈哈哈
    root01
        20
    root01  
       94 天前
    json 更恶心
    ysn2233
        21
    ysn2233  
       94 天前
    我感觉 yaml 还行啊,json 要写一大堆引号感觉更烦
    infun
        22
    infun  
       94 天前   ❤️ 1
    大家都来用 toml 吧
    WIN2333
        23
    WIN2333  
       94 天前
    @lucifer9 服务器上改配置都是 vim 。。。出问题是真的很麻烦的
    weixiangzhe
        24
    weixiangzhe  
       94 天前
    老派就是回到 json5, 新派就用 toml 吧
    whileFalse
        25
    whileFalse  
       94 天前 via iPhone
    @wangxiaoaer 你可以在 yaml 里写 json 。不行就弄个小程序一键转吧
    汇编用的蛮好的,为什么你非要换用高级语言呢。
    perfectlife
        26
    perfectlife  
       94 天前 via Android
    用 k8s 后 yaml 就写习惯了
    mxT52CRuqR6o5
        27
    mxT52CRuqR6o5  
       94 天前 via Android
    你可能需要一个游标卡尺
    Konys
        28
    Konys  
       94 天前
    yml 可以了, 比 xml 和 properties 文件强太多了
    ysc3839
        29
    ysc3839  
       93 天前
    @dzdh 个人猜测是出现得早,支持 merge keys 等比较实用的功能,以及强制格式可以大大增加可读性,且对专业用户来说并不会带来太多不便。比如用 Python 和其他不强制缩进语言对比,一些不注重代码格式的人写其他语言往往比较乱,而 Python 则乱得没那么厉害。
    itskingname
        30
    itskingname  
       93 天前
    我觉得有这种感受的人,都是 Yaml 格式自己写得不规范。类似的还有觉得写 Python 代码要用游标卡尺。

    正常情况下,Python 代码的嵌套缩进不会超过 3 层,超过了一定是代码本身有问题,是可以通过改进代码来减少缩进的。同理,Yaml 也是一样,你缩进十几层那肯定是因为写得不规范。

    Yaml 是有类似变量的这种机制的,当你不得不深层嵌套的时候,是可以在顶层赋值给一个变量,然后在别处直接通过变量来引用,这样就可以避免深层缩进嵌套的问题。
    securityCoding
        31
    securityCoding  
       93 天前
    yaml 挺好一目了然,ini json 写个配置能把人写吐了,尤其是 json
    ospider
        32
    ospider  
       93 天前
    Python 用缩进基本可以接受,代码复制来复制去的场景是不多见的。但是 yaml 这种配置用缩进真的是无语,配置文件还是经常需要复制的。连 Python 现在都用 pyproject.toml ,而不是 yaml 了。
    adoal
        33
    adoal  
       93 天前
    缩进的语言那么多,只有 Python 和 YAML 这样用得广泛的才配被人骂😄
    LaTero
        34
    LaTero  
       93 天前 via Android
    @adoal 说明绝大部分用缩进的都流行不起来。
    also24
        35
    also24  
       93 天前
    好像仍然很多人没意识到我前面说的 yaml 是可以用括号的。


    那具体化一点,我们随便找个例子

    version: "3.9"
    services:
    web:
    build: .
    ports:
    - "8000:5000"
    redis:
    image: "redis:alpine"


    上面这一段,是可以等同于下面这一段的

    {"version": "3.9","services": {
    "web": {"build": ".","ports": ["8000:5000"]},
    "redis": {"image": "redis:alpine"}
    }}
    xuyang2
        36
    xuyang2  
       93 天前   ❤️ 1
    also24
        37
    also24  
       93 天前   ❤️ 1
    好像缩进有点问题,截图说明吧,下面这几种写法,都是有效的

    falcon05
        38
    falcon05  
       93 天前
    是的,这玩意是真恶心,次看到就头大,每次改的时候小心翼翼。
    falcon05
        39
    falcon05  
       93 天前
    如果在服务器上用 vim 改,一个复制粘贴下去我了个去
    lovedoing
        40
    lovedoing  
       93 天前
    每次改 clash 的配置文件复制粘贴之后缩进不对都想骂人
    hxtheone
        41
    hxtheone  
       93 天前 via iPhone
    人生苦短,新项目直接 toml
    tairan2006
        42
    tairan2006  
       93 天前
    你用 jsonnet 生成啊……
    mingsi
        43
    mingsi  
       93 天前 via Android
    看好几个人推荐 toml 于是了解了一下,看起来是升级版的 ini ,只适合小项目玩玩
    https://hitchdev.com/strictyaml/why-not/toml/
    julyclyde
        44
    julyclyde  
       93 天前
    @also24 你这个所谓用括号好像是 json 啊,不是 yaml
    yaml 里好像只有 list 、dict 类型的 value 可以用括号吧
    also24
        45
    also24  
       93 天前 via Android
    @julyclyde
    你去仔细看看文档,再去试一试嘛
    julyclyde
        46
    julyclyde  
       93 天前
    @also24 是那个所谓 flow style 吗?
    好像文档里例子不是你给的这样子的啊
    Ricardoo
        47
    Ricardoo  
       92 天前
    看了一圈,没人用 json5
    我倒挺喜欢的
    also24
        48
    also24  
       92 天前
    @julyclyde #46
    是的

    我给的例子,为了突出特点,故意将 flow style 和 block style 混写了( yaml 也支持这么做)
    wheeler
        49
    wheeler  
       90 天前 via iPhone
    @xuyang2 #36 我还想找这个网页发来着。感谢🙏
    julyclyde
        50
    julyclyde  
       89 天前
    @also24 你后面那个例子看着完全就是 json 啊( key 名也加引号)
    also24
        51
    also24  
       89 天前
    @julyclyde #50
    YAML 本来就是 JSON 的超集
    julyclyde
        52
    julyclyde  
       89 天前
    @also24 超集这个说法,是民间认为的,还是他们开发方的设计思想,还是他们开发方公布的现状?
    这可是三个完全不同的概念呀
    also24
        53
    also24  
       89 天前   ❤️ 1
    @julyclyde #52
    https://yaml.org/spec/1.2.2/#12-yaml-history

    The YAML 1.23 specification was published in 2009. Its primary focus was making YAML a strict superset of JSON. It also removed many of the problematic implicit typing recommendations.
    julyclyde
        54
    julyclyde  
       89 天前
    @also24 谢谢你
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   2175 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 02:55 · PVG 10:55 · LAX 19:55 · JFK 22:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.