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

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

  •  
  •   proxychains · 2022-12-21 22:20:21 +08:00 · 4652 次点击
    这是一个创建于 710 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    不习惯的话写 json 就好了(
    dcsuibian
        11
    dcsuibian  
       2022-12-22 00:55:12 +08:00
    xml-->json-->yaml 。我觉得 yaml 挺好的。

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

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

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

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

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

    Yaml 是有类似变量的这种机制的,当你不得不深层嵌套的时候,是可以在顶层赋值给一个变量,然后在别处直接通过变量来引用,这样就可以避免深层缩进嵌套的问题。
    securityCoding
        31
    securityCoding  
       2022-12-22 11:20:32 +08:00
    yaml 挺好一目了然,ini json 写个配置能把人写吐了,尤其是 json
    ospider
        32
    ospider  
       2022-12-22 11:38:35 +08:00
    Python 用缩进基本可以接受,代码复制来复制去的场景是不多见的。但是 yaml 这种配置用缩进真的是无语,配置文件还是经常需要复制的。连 Python 现在都用 pyproject.toml ,而不是 yaml 了。
    adoal
        33
    adoal  
       2022-12-22 11:38:36 +08:00
    缩进的语言那么多,只有 Python 和 YAML 这样用得广泛的才配被人骂😄
    LaTero
        34
    LaTero  
       2022-12-22 12:39:49 +08:00 via Android
    @adoal 说明绝大部分用缩进的都流行不起来。
    also24
        35
    also24  
       2022-12-22 13:15:42 +08:00
    好像仍然很多人没意识到我前面说的 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  
       2022-12-22 13:25:30 +08:00   ❤️ 1
    also24
        37
    also24  
       2022-12-22 13:26:29 +08:00   ❤️ 1
    好像缩进有点问题,截图说明吧,下面这几种写法,都是有效的

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

    我给的例子,为了突出特点,故意将 flow style 和 block style 混写了( yaml 也支持这么做)
    wheeler
        49
    wheeler  
       2022-12-25 12:51:36 +08:00 via iPhone
    @xuyang2 #36 我还想找这个网页发来着。感谢🙏
    julyclyde
        50
    julyclyde  
       2022-12-26 11:44:12 +08:00
    @also24 你后面那个例子看着完全就是 json 啊( key 名也加引号)
    also24
        51
    also24  
       2022-12-26 11:51:25 +08:00
    @julyclyde #50
    YAML 本来就是 JSON 的超集
    julyclyde
        52
    julyclyde  
       2022-12-26 11:54:28 +08:00
    @also24 超集这个说法,是民间认为的,还是他们开发方的设计思想,还是他们开发方公布的现状?
    这可是三个完全不同的概念呀
    also24
        53
    also24  
       2022-12-26 12:06:08 +08:00   ❤️ 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  
       2022-12-26 12:09:13 +08:00
    @also24 谢谢你
    crazyweeds
        55
    crazyweeds  
       2023-04-14 23:45:52 +08:00
    ubuntu 下面编辑 netplan 配置,我已经吐了,无数遍了,都是失败。。没网络,数空格。要不是为了安装 rancher ,我绝对不会用 ubuntu ,因为 yaml !!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   123 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:54 · PVG 05:54 · LAX 13:54 · JFK 16:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.