You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VSCode/UltiSnips(Vim)中创建带可变参数的代码片段

VSCode 实现可变参数代码片段

1. 动态 inputN 输入片段

VSCode 代码片段支持正则触发与变量替换,可通过解析触发词中的数字生成对应数量的输入占位符。在全局或工作区代码片段文件(如cpp.json)中添加以下配置:

{
  "Dynamic Input": {
    "prefix": "input(\\d+)",
    "body": [
      "cin >> ${1:var1} ${2:+>> ${2:var2}} ${3:+>> ${3:var3}} ${4:+>> ${4:var4}} ${5:+>> ${5:var5}} ${6:+>> ${6:var6}} ${7:+>> ${7:var7}} ${8:+>> ${8:var8}} ${9:+>> ${9:var9}};",
      "$0"
    ],
    "description": "Generate cin input with N variables",
    "regex": true
  }
}
  • 触发逻辑:输入input3时,正则匹配提取数字3,渲染对应数量的占位符(${n:+...}为条件语法,未使用的占位符会自动隐藏)。
  • 占位符说明:${1:var1}是带默认值的首变量,后续${2:+>> ${2:var2}}表示仅当第2个占位符被使用时才显示>> var2。

2. 动态 arrinputMN 矩阵输入片段

通过正则触发解析矩阵的M和N维度,生成初始化与输入代码:

{
  "Dynamic Matrix Input": {
    "prefix": "arrinput(\\d+)(\\d+)",
    "body": [
      "vector<vector<int>> arr($1, vector<int>($2));",
      "for (int i = 0; i < $1; ++i) {",
      "    for (int j = 0; j < $2; ++j) {",
      "        cin >> arr[i][j];",
      "    }",
      "}",
      "$0"
    ],
    "description": "Generate MxN matrix initialization and input",
    "regex": true
  }
}
  • 触发逻辑:输入arrinput34时,正则提取3和4,分别替换代码中的$1和$2,生成3行4列的矩阵输入代码。

UltiSnips (Vim) 实现可变参数代码片段

UltiSnips 支持用 Python 代码解析触发词,灵活性更强,可处理任意数字的场景。在 UltiSnips C++ 代码片段文件(如cpp.snippets)中添加以下内容:

1. 动态 inputN 输入片段

snippet input(\d+) "Dynamic cin input" r
`!p
n = int(match.group(1))
parts = [f"${{{i}:var{i}}}" for i in range(1, n+1)]
snip.rv = "cin >> " + " >> ".join(parts) + ";$0"
`
endsnippet
  • 触发逻辑:r表示正则触发,输入input5时,match.group(1)提取数字5,Python 代码自动生成5个占位符拼接成目标代码。
  • 优势:支持任意正整数N,无需提前写死占位符数量。

2. 动态 arrinputMN 矩阵输入片段

snippet arrinput(\d+)(\d+) "Dynamic MxN matrix input" r
`!p
m = int(match.group(1))
n = int(match.group(2))
code = f"vector<vector<int>> arr({m}, vector<int>({n}));\n"
code += "for (int i = 0; i < {m}; ++i) {{\n    for (int j = 0; j < {n}; ++j) {{\n        cin >> arr[i][j];\n    }}\n}}$0".format(m=m, n=n)
snip.rv = code
`
endsnippet
  • 触发逻辑:输入arrinput23时,match.group(1)和match.group(2)分别提取2和3,生成2行3列的矩阵初始化与循环输入代码。

内容的提问来源于stack exchange,提问作者Cosec SecCot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:20:17