2016-08-19 78 views
1

我正在創建一個json文件,並且已經計算出如何將雙引號添加到適當的行中,但我需要知道如何將每兩行換行在大括號中。Vim正則表達式每隔幾行添加大括號

例:

"value": "Bahraini Foreign Ministry" 
"tag": "project:bahrain;id:2201", 
"value": "Bahraini Foreign Minister" 
"tag": "project:bahrain;id:2202", 

需要是:

{ 
"value": "Bahraini Foreign Ministry" 
"tag": "project:bahrain;id:2201", 
}, 
{ 
"value": "Bahraini Foreign Minister" 
"tag": "project:bahrain;id:2202", 
}, 

我與:%norm:%s審判和各界這裏我繞來繞去。任何想法表示讚賞!

+0

哎呀,這些逗號是假設在價值線的末尾 – bspckl

+0

您的目標是什麼?使用vim regex或在需要的地方添加花括號? – Angelos

+0

在vim中需要添加花括號。它不一定是正則表達式 – bspckl

回答

2

dNitro's solution是一種方法。這是另一種方式:

qqqqqqO{<esc>jjo},<esc>[email protected]@q 

這產生了遞歸宏,例如,一個自稱的宏。由於遞歸宏運行直到遇到錯誤,並且在最後一行調用j時會引發錯誤,所以對於任何數據大小都適用。說明:

qqq清除寄存器'q'。 qq開始在寄存器'q'中記錄。 O{<esc>在當前行上方的行上插入括號。 jj向下移動(到其上有「標籤」的行)。 o},<esc>在當前行之後的下一行放置括號。 [email protected]將重新放在具有「值」的行上,並且@q調用「q」宏。由於記錄時它是空的,這實際上不會做任何事情。但是,一旦你點擊[email protected],這將停止錄製,然後調用這個遞歸宏。

另一種選擇是使用:global命令,例如,

:g/value/normal O{^[jjo}, 

注意^[是,你必須通過按「CTRL-V,CTRL-ESC」

這基本上是同樣的事情,只是不使用宏,它會自動進入文字轉義字符將「正常」之後的一組擊鍵應用於包含文本「值」的每一行。

而只是爲了好玩,這裏是最後一個選擇,是一個替換命令:

:%s/.*"value".*\n.*,/{\r&\r},, 

這將替換兩行,其中第一行包含文本"value",用方括號括起來相同的文本。