如何根据类型

时间:2017-07-01 10:58:46

标签: c vim refactoring

我需要找到一种方法来执行/找到一个可以根据patern更改变量名称的vim脚本!

这是一个有助于帮助的答案 Changing Variable Names in Vim

它会检查wich类型是变量并添加特定前缀

例如:

char myvarchar char_myvar

char *myvarchar pointer_char_myvar

或者变量是函数的参数

f(char myvar)f(char param_char_myvar)

这种标记将由模式匹配

定义

这个想法似乎用gd转到变量定义,将其保存在寄存器中,然后在另外注册四个单词之前(因为在char *myvar*计数就像一个单词并且我们需要足够的信息来知道它在一个函数中),检查patern匹配(检查类型,检查是否在函数或本地)然后添加标记。

此外如何将此脚本应用于所有变量?

但是我很难挫败。

任何帮助?

1 个答案:

答案 0 :(得分:0)

这确实是一件非常愚蠢的事情。它甚至比系统匈牙利语更糟糕 - 在这个主题上检查Joel Spolsky的十年之久article/post。 (它可能会在你的环境中开眼界)

反正。在lh-cpp我有一些函数能够提取类型或告诉何时类型实际上是指针或const等。我还有解码函数签名的函数。它位于插件的autoload / lh / cpp目录中。它可能取决于lh-dev的其他功能。

然后你必须检测所有变量声明(universal-ctags或cscope将在这里帮助),然后重命名它们的所有出现次数。

老实说,你最好继续使用libclang来重构你的代码。

更准确地说,找到确切的函数并不简单,因为我的插件的这些部分没有记录:

  • echo lh#dev#c#function#_analyse_parameter('char *str')将分解变量声明,
  • echo lh#dev#c#types#is_pointer(lh#dev#c#function#_analyse_parameter('char *str').type)对你来说,变量背后的类型是否实际上是一个指针。注意:它不支持每行char *s, c;
  • 的多个声明之类的内容
  • 给定声明函数的行号,:echo lh#dev#c#function#get_prototype(linenr, 0)将提取可以用lh#cpp#AnalysisLib_Function#AnalysePrototype(the_protoype)分析的函数原型,在那里你将有函数返回类型,它的名字和列表其所有参数(类型,名称,以及其他信息)。
  • 我还有一个lh#dev#get_variables()函数,它返回ctags能够在一系列行中识别的所有局部变量 - 这需要我的lh-tags插件。