如何在VSCode或Vim中批量生成类/结构体字段赋值代码?
批量设置结构体字段的高效方法(VSCode/Vim)
VSCode 操作技巧
方式一:多行编辑+手动筛选
- 复制结构体中所有
bool isValidX;的行到代码需要的位置。 - 选中所有这些行,按下
Ctrl+Shift+L(Windows/Linux)或Cmd+Shift+L(Mac)进入多行编辑模式。 - 光标移到
bool的末尾,删除bool;再移到行尾删除;,得到纯isValidX的列表。 - 再次进入多行编辑,在每一行开头输入
myStruct.,行尾输入= true;。 - 找到
myStruct.isValid3 = true;这一行直接删除即可。
方式二:正则查找替换(一步到位)
- 打开查找替换面板(
Ctrl+H),勾选「正则表达式」选项。 - 查找框输入:
bool (isValid(?!3)); - 替换框输入:
myStruct.$1 = true; - 点击「替换全部」,自动生成除isValid3外所有字段的赋值语句。
Vim 操作技巧
方式一:宏录制批量处理
- 复制结构体中所有
bool isValidX;的行到目标位置。 - 光标定位到第一行开头,输入
q a开始录制宏(a是宏的名称,可自定义)。 - 依次执行:
cwmyStruct.isValid:替换行首的bool为myStruct.$:跳到行尾x:删除分号a = true;:追加赋值内容j:跳到下一行q:停止录制
- 输入
@a执行一次宏,输入100@a(根据字段数量调整数字)批量执行,完成所有行的转换。 - 输入
:g/myStruct.isValid3 = true;/d删除目标行。
方式二:正则替换直接生成
在Vim命令模式下执行以下两条命令:
# 先把所有bool字段转换为赋值语句 :%s/bool \(isValid\d\+\);/myStruct.\1 = true;/g # 删除isValid3的赋值行 :g/myStruct.isValid3 = true;/d
更优的代码重构方案
如果后续还要频繁操作这类字段,建议把零散的bool字段改成数组或std::bitset,从根源上避免重复代码:
struct MyStruct{ bool isValid[100]; // 或者用 std::bitset<100> isValid; };
赋值时用循环批量处理:
// 全部设为true std::fill(std::begin(myStruct.isValid), std::end(myStruct.isValid), true); // 单独把isValid3设为false(数组下标从0开始,对应第4个元素) myStruct.isValid[3] = false;
内容的提问来源于stack exchange,提问作者Biao Cao
相关产品推荐
相关产品推荐

