【问题标题】:Escaping new line character in CSON在 CSON 中转义换行符
【发布时间】:2026-01-29 05:55:01
【问题描述】:

所以当我使用 Atom 文本编辑器时,我经常使用Snippets。它们写在.cson 文件中,如下所示:

'.source.cpp':
  'cout':
    'prefix': 'cout'
    'body': 'std::cout << "${1:/* message */}" << \n;$2'

现在,当我这样写时,Atom 将 \n 解释为换行符,而不是:

std::cout &lt;&lt; "${1:/* message */}" &lt;&lt; \n

我明白了:

std::cout << "${1:/* message */}" <<

(自动插入新行)

我怎样才能将\n 视为一串文本?

【问题讨论】:

  • 尝试转义 \ 字符:'body': 'std::cout &lt;&lt; "${1:/* message */}" &lt;&lt; \\n;$2'(注意双精度 \\
  • 然后是:std::cout &lt;&lt; "/* message */" &lt;&lt; n;

标签: special-characters atom-editor code-snippets


【解决方案1】:

您需要使用 4 个反斜杠来完成这项工作。

'.source.cpp':
  'cout':
    'prefix': 'cout'
    'body': 'std::cout << "${1:/* message */}" << \\\\n;$2'

这在编辑器中扩展为:

std::cout << "/* message */" << \n;

我对 Atom 的内部结构不够熟悉,无法完全解释这一点,但可能是它在加载 cson 文件时插入一次(导致\\n),然后在插入期间再次插入(导致最终输出字符串\n)。

【讨论】:

    【解决方案2】:

    要正确转义\n,您必须在单行字符串中使用\\n。但是请注意,CSON 还支持多行字符串,这通常更易于维护。

    示例:

    body: """
      std::cout << "${1:/* message */}" <<
      $0
    """
    

    $0 制表位总是排在最后,但$2 没有任何问题。

    【讨论】:

    • OP 不想要一个实际的换行符,他们想插入两个字符序列\n