proxychains
V2EX  ›  问与答

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

  •  
  •   proxychains · Dec 21, 2022 · 5501 views
    This topic created in 1259 days ago, the information mentioned may be changed or developed.

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

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

    不习惯的话写 json 就好了(
    dcsuibian
        11
    dcsuibian  
       Dec 22, 2022
    xml-->json-->yaml 。我觉得 yaml 挺好的。

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

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

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

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

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

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

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

    我给的例子,为了突出特点,故意将 flow style 和 block style 混写了( yaml 也支持这么做)
    wheeler
        49
    wheeler  
       Dec 25, 2022 via iPhone
    @xuyang2 #36 我还想找这个网页发来着。感谢🙏
    julyclyde
        50
    julyclyde  
       Dec 26, 2022
    @also24 你后面那个例子看着完全就是 json 啊( key 名也加引号)
    also24
        51
    also24  
       Dec 26, 2022
    @julyclyde #50
    YAML 本来就是 JSON 的超集
    julyclyde
        52
    julyclyde  
       Dec 26, 2022
    @also24 超集这个说法,是民间认为的,还是他们开发方的设计思想,还是他们开发方公布的现状?
    这可是三个完全不同的概念呀
    also24
        53
    also24  
       Dec 26, 2022   ❤️ 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  
       Dec 26, 2022
    @also24 谢谢你
    crazyweeds
        55
    crazyweeds  
       Apr 14, 2023
    ubuntu 下面编辑 netplan 配置,我已经吐了,无数遍了,都是失败。。没网络,数空格。要不是为了安装 rancher ,我绝对不会用 ubuntu ,因为 yaml !!!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4992 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 156ms · UTC 09:43 · PVG 17:43 · LAX 02:43 · JFK 05:43
    ♥ Do have faith in what you're doing.