5

我使用很多 JSON。我想要对整个 JSON 块进行操作是非常常见的——选择整个块、删除块、移动它等。有没有办法对键及其值组合进行操作?

小样:

vim 删除 json 键模型

在这种情况下,类似的动作viB将不起作用,因为它将选择同一嵌套级别中的所有孩子(不是我想要的)。我想要完整的块,只有那个块用于光标所在的位置。

4

2 回答 2

3

使用vim-textobj-user你可以定义一个文本对象来选择你想要的任何东西。这是一个选择与我刚刚写的条件匹配的块:

call textobj#user#plugin('textobj-syntax-is-garbage', {
\   'regex_j': {
\     'select': 'aj',
\     '*pattern*': '^\s*"\?\w\+"\?\s*:\s*{\_[^}]*}.*\n\?',
\   })

不适用于嵌套的 json 块 :( 但它适用于您的用例

aj您可以执行的方法vajdaj您的小心脏想要的任何方法。

解释:

^\s*"\?\w\+"\?\s*:\s*{

从行首匹配带有可选双引号的键(单词字符)

\_[^}]*

匹配任何不是闭合乳头支架的东西。\_表示跨多行匹配。

}.*\n\?

匹配一个闭合的奶嘴括号和一个可选的换行符,以便在删除块后它不会留下换行符。

这个正则表达式肯定可以改进。使用正则表达式进行正确的嵌套块选择可能是不可能的,但我认为 textobj-entire 也可以让您指定要运行的函数。

于 2013-07-16T20:41:08.550 回答
1

我创建了一个适用于参数/参数的插件,称为Argumentative。Argumentative 提供了一个新的文本对象,i,并且a,. 您还可以通过>,和转移参数<,。我确信还有其他插件可以做类似的事情。

于 2013-07-16T19:50:10.460 回答