簡體   English   中英

Vim正則表達式每隔幾行添加大括號

[英]Vim regex to add curly braces every few lines

我正在創建一個json文件,並且已經弄清楚了如何在適當的行上添加雙引號等,但是我需要知道如何將每2行用大括號括起來。

例如:

"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並且在這里轉了一圈。 任何想法表示贊賞!

dNitro的解決方案是做到這一點的一種方法。 這是另一種方式:

qqqqqqO{<esc>jjo},<esc>j@qq@q

這將創建一個遞歸宏,例如調用自身的宏。 由於遞歸宏會一直運行直到遇到錯誤,並且在最后一行調用j會引發錯誤,因此這適用於任何數據大小。 說明:

qqq清除寄存器“ q”。 qq開始記錄在寄存器“ q”中。 O{<esc>在當前行上方的行上插入一個括號。 jj向下移動(移至帶有“ tag”的行)。 o},<esc>在當前行之后的下一行放置一個括號。 j@q穿回用“價值”的線路,並@q調用“Q”宏。 由於錄制時它是空的,因此實際上不會執行任何操作。 但是,一旦按下q@q ,它將停止記錄,然后調用此遞歸宏。

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

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

請注意, ^[是字面轉義字符,您必須通過按“ ctrl-v,ctrl-esc”輸入

本質上是同一件事,除了使用宏之外,它自動將“正常”之后的一組擊鍵應用於包含文本“值”的每一行。

只是為了好玩,這是最后一個替代方法,一個替代命令:

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

這將替換第一行包含文本"value"兩行,並在方括號中包含相同的文本。

暫無
暫無

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

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