【问题标题】:Search and replace with increment in vim在vim中搜索并替换为增量
【发布时间】:2020-11-18 19:48:46
【问题描述】:

我有一个 json 文件,如下所示:

{
        "pk": 1,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
   {
        "pk": 1,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
   {
        "pk": 1,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },

等等……

我想搜索并替换 "pk": 1 并增加值。所以我的文件看起来像:

{
        "pk": 1,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
   {
        "pk": 2,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
   {
        "pk": 3,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },

到目前为止我已经尝试过:

:让 i=1 | g/"pk": 1/s//="pk":.i./ |让 i=i+1

要搜索 "pk": 1 模式并使用计数器替换它,但我在某处出现语法错误并且正在碰壁。

非常感谢任何帮助/建议。

【问题讨论】:

标签: vim


【解决方案1】:

你可以试试:

:let i=1 | g/"pk": \zs\d\+/ s//\=i/ | let i+=1

 \zs .............. start pattern

要修复您的尝试,请执行以下操作:

:let i=1 | g/"pk": 1/s//\='"pk": ' .i/ | let i=i+1

如您所见,第一个错误是替换部分 \= 缺少反斜杠。第二个是在 . 末尾使用第二个连接,这将使 vim 尝试将变量连接到任何内容。第三个是忘记将"pk": 放入“单引号”中,否则您最终会得到 pk 未加引号。请记住,这里我们将字符串与数字连接起来。

【讨论】:

  • 这看起来不错,但 ':' 不应该在解决方案替换部分的双引号之外吗?
猜你喜欢
  • 2019-06-21
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多