簡體   English   中英

使用Linux / Vim將頭文件或文本文件信息轉換為代碼

[英]Converting header or text file information to code using Linux/Vim

我發現自己編寫了一個非常簡單的從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\\+\\)正在執行的操作,然后匹配的文本在替換中使用兩次。

重復性任務的另一個通用解決方案是使用macros ,或者在幫助中調用復雜的重復。

基本上,您開始在寄存器中記錄輸入,創建單個案例,然后轉到定義的下一行。

有關詳細信息,請參閱:help q

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM