"Class Initializer": {
"prefix": "rci",
"body": [
"${1/([^,]+)([,\\s]*|)/attr_reader :$1\n/g}",
"${1/([^,]+)([,\\s]*|)/# @param $1 [...]${2:+\n}/g}",
"def initialize($1)",
"${1/([^,]+)((,\\s*)|)/\t@$1 = $1${2:+\n}/g}",
"end"
],
"description": "Initialize Class"
}
让它适用于任意数量的方法参数的关键是让它们进入同一个正则表达式捕获组。
然后,设置全局标志后,每个捕获组将触发替换文本。因此,例如,/attr_reader :$1\n/g
如果您有 3 个方法参数,将被触发 3 次。
您将${2:+\n}
在上面的转换中看到这一点。这意味着如果有一个捕获组 2,则添加一个换行符。正则表达式的设计使得如果,
参数之间有另一个捕获组,则只有一个捕获组 2。所以最后)
一个参数之后的 final 不会触发另一个换行符 - 因此输出与换行符完全匹配您想要的输出(但您可以轻松添加或删除换行符)。
您的输入必须采用正确的形式:
v1, v2, v3
这是一个演示:

因此,必要的形式又是 justv1 v2 v3
。参数之间不需要有空格,但是你也会得到def initialize(v1,v2,v3)
没有空格的。
在最后一个参数之后点击Tab以触发完成。
事实证明,片段非常强大!
有关使用多个参数的类似问题,请参阅VSCode 片段:将多个对象添加到类构造函数