linux - 使用 Linux/Vim 将头文件或文本文件信息转换为代码

标签 linux parsing vim opencl text-processing

我发现自己编写了一个非常简单的从 OpenCL 错误代码到人类可读字符串的转换。大约 50 个不同的代码在头文件中定义如下:

...
#define CL_INVALID_CONTEXT -34
#define CL_INVALID_QUEUE_PROPERTIES -35
#define CL_INVALID_COMMAND_QUEUE -36
#define CL_INVALID_HOST_PTR -37
...

我使用专家复制/粘贴将所有这些放在一个巨大的开关/外壳中:

...
case CL_INVALID_CONTEXT:
  return "CL_INVALID_CONTEXT";
case CL_INVALID_QUEUE_PROPERTIES:
   return "CL_INVALID_QUEUE_PROPERTIES";
case CL_INVALID_COMMAND_QUEUE:
   return "CL_INVALID_COMMAND_QUEUE";
case CL_INVALID_HOST_PTR:
    return "CL_INVALID_HOST_PTR";
...

自从我最近开始使用 Vim 以来,我认为可能有一种方法可以使用 Linux 命令工具和 Vim 以更有效的方式执行此操作。这里有一篇类似的帖子,有人声称是用 Emacs 完成的。关于如何避免下次在类似任务上浪费 15 分钟的任何想法?

(我知道 oclErrorSting() 可能存在,但为了一般性,让我们忽略它!)

最佳答案

您可以在 Vim 中通过搜索和替换来完成此操作:

%s/#define \(\w\+\).*/case \1:^M  return "\1";/g

在输出中获取 ^M 的技巧是键入 CTRL-V 然后在要放置换行符的地方输入 Enter输出。

这将对整个文件进行替换。

这是通过搜索匹配整行并将其替换为您想要的文本来实现的。每个名称在搜索中被捕获到一个组中,这就是 \(\w\+\) 所做的,然后匹配的文本在替换中使用两次。

关于linux - 使用 Linux/Vim 将头文件或文本文件信息转换为代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022115/

相关文章:

c++ - boost::spirit:多维输入的迭代器和解析器

parsing - 我可以将参数传递给我的 fsyacc 解析器吗?

git - 如何跳转到 GIT difftool 中的下一个/上一个差异?

vim - 自动格式化时如何使vim不打断字符串?

linux - 如何查找文本文件中多个单词的数量?

java - 在Java中解析Java日期格式

linux - 递归文本替换和文件扩展名重命名

vim - 使Vim curl 括号,方括号,Parens的行为类似于Textmate

linux - 使用 SED 进行网页抓取

python - Ubuntu 9.10 中奇怪的 pynotify 行为