Vim从JSON或javascript对象中删除/抽取/复制一个键/条目块

时间:2013-07-16 18:59:34

标签: vim

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

样机:

vim delete json key mockup

viB这样的动作在这种情况下不起作用,因为它将选择同一巢级别中的所有子项(不是我想要的)。我想要完整的块,只有那个块,无论光标结束了什么。

2 个答案:

答案 0 :(得分:3)

使用vim-textobj-user你可以定义一个textobject来选择你想要的任何东西。这里有一个选择符合我刚写的条件的块:

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

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

aj表示你可以执行 v a j d a j 或者你的小心愿。

说明:

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

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

\_[^}]*

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

}.*\n\?

匹配关闭的乳头支架和可选的换行符,以便在删除块后不会留下断行线。

这个正则表达式可以明确地得到改善。用正则表达式进行正确的嵌套块选择可能是不可能的,但我认为textobj-whole允许你指定一个运行的函数。

答案 1 :(得分:1)

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