重命名结构成员及其在文件中的所有用法
我可以使用emacs或IDE(MS/Mono/sun studio等)重命名结构成员及其所有用法(我的意思是,用 - >或。运营商)在一个文件?比如我有重命名结构成员及其在文件中的所有用法
struct foo { int a_1, int int b_2; //etc }
我改变结构来是这样的:
struct foo { struct { int a_1, int b_2; } v; //etc }
而且还有在struct foo
源代码或struct foo*
类型很多f->a_1
或f.a_1
和f->b_2
或f.b_2
,现在我需要替换为编译器在v
结构中找到它:f.v->a_1
而不是。我怎么能这样做?
Regexp是一个丑陋的解决方案(如果另一个解决方案是手动完成的话,我可以这样做),但不可行,因为它需要与结构类型相匹配。所以,它需要执行知道C类型的文本编辑器/ IDE。如果你不知道如何用emacs做到这一点,但用IDE做请告诉我。
您可以RTags的Emacs的插件做到这一点:
https://github.com/Andersbakken/rtags/
rtags-rename-symbol
(默认绑定:CX R R)
免责声明:
我觉得它的工作原理非常好吧,但我有宏重命名和沉重的模板化C++代码的问题(这些可能已经修复编辑在最新版本)。
它还可以一次性跨多个文件重命名符号(如果您正在使用项目,则需要compile_commands.json),因此在测试代码之前隐藏/保存更改 - 以防万一。
我会试试它。谢谢。 –
我不是这方面的专家,但是你不能用Emacs替换 - 用'.v.a_1'替换'.v_1 a_1'和'.a_1'替换' - > a_1'' ?听起来像是字符串替换,不是吗? – Drew
也许,这会有帮助:'语义模式','开发 - >导航标签 - >查找标签引用'。搜索您的标签。打开一个Symref缓冲区。在那里你可以重命名标签。 'Symref->展开所有条目','在打开的匹配中重命名符号。 – Tobias
@德鲁:问题是还有其他成员的同名不同类型的结构也将被替换。但不是我想要的,而是一个特定的结构类型 –