VS代码中重组文本中的标题片段

Snippet for title in restructured text in vs code

在重组文本中,标题使用相同数量的非字母数字 7 位 ASCII 书写 字符作为标题文本。如果同时使用下划线和上划线,则应相等且至少与标题文本一样长。来自 official docs:

Titles are underlined (or over- and underlined) with a printing nonalphanumeric 7-bit ASCII character. Recommended choices are "= - ` : ' " ~ ^ _ * + # < >". The underline/overline must be at least as long as the title text.

标题示例

=========================================================
Main titles are written using equals signs over and under
=========================================================

我想为此创建一个 VS 代码片段。我能做的只有这些,

"Title RST": {
    "prefix": "title",
    "body": [
      "="
      ""
      "=\n"
      "[=11=]"
    ],
    "description": "Title for restructured text"
  }

有没有办法知道将要输入的文本的长度,并相应地插入相同数量的上划线和下划线=

yasnippet in emacs中,他们这样做:

${1:$(make-string (string-width yas-text) ?\=)}
${1:Title}
${1:$(make-string (string-width yas-text) ?\=)}

[=12=]

对如何在 VS 代码 中实现这样的片段有帮助吗?我查看了 restructured text VS Code here 扩展中的片段,但找不到适合我需要的片段。

  "Title RST": {
    "prefix": "title",
    "body": [
      "${1/./=/g}",
      "",
      "${1/./=/g}",
      "[=10=]"
    ],
    "description": "Title for restructured text"
  },

转换 ${1/./=/g} 只是将文本 </code> 中的每个字符替换为文本上方和下方行中的 <code>=

您的代码段条目末尾需要逗号,不需要换行符,因为代码段中的另一行 body 已经是换行符。

当您键入文本时,点击 Tab 即可完成转换。


您询问是否可以让 over/underlines 在键入标题文本后立即显示为 =。但这对于 vscode 片段是不可能的,需要进行转换,直到 Tab.

才会发生

可以用 HyperSnips 版本来完成(设置起来比普通的 vscode 片段要麻烦一点,但不多):

snippet title "Title" A
``rv =  '='.repeat(t[0].length)``

``rv = '='.repeat(t[0].length)``
endsnippet