我使用很多 JSON。我想要对整个 JSON 块进行操作是非常常见的——选择整个块、删除块、移动它等。有没有办法对键及其值组合进行操作?
小样:
在这种情况下,类似的动作viB
将不起作用,因为它将选择同一嵌套级别中的所有孩子(不是我想要的)。我想要完整的块,只有那个块用于光标所在的位置。
我使用很多 JSON。我想要对整个 JSON 块进行操作是非常常见的——选择整个块、删除块、移动它等。有没有办法对键及其值组合进行操作?
小样:
在这种情况下,类似的动作viB
将不起作用,因为它将选择同一嵌套级别中的所有孩子(不是我想要的)。我想要完整的块,只有那个块用于光标所在的位置。
使用vim-textobj-user你可以定义一个文本对象来选择你想要的任何东西。这是一个选择与我刚刚写的条件匹配的块:
call textobj#user#plugin('textobj-syntax-is-garbage', {
\ 'regex_j': {
\ 'select': 'aj',
\ '*pattern*': '^\s*"\?\w\+"\?\s*:\s*{\_[^}]*}.*\n\?',
\ })
这不适用于嵌套的 json 块 :( 但它适用于您的用例
aj
您可以执行的方法vaj或daj您的小心脏想要的任何方法。
解释:
^\s*"\?\w\+"\?\s*:\s*{
从行首匹配带有可选双引号的键(单词字符)
\_[^}]*
匹配任何不是闭合乳头支架的东西。\_
表示跨多行匹配。
}.*\n\?
匹配一个闭合的奶嘴括号和一个可选的换行符,以便在删除块后它不会留下换行符。
这个正则表达式肯定可以改进。使用正则表达式进行正确的嵌套块选择可能是不可能的,但我认为 textobj-entire 也可以让您指定要运行的函数。
我创建了一个适用于参数/参数的插件,称为Argumentative。Argumentative 提供了一个新的文本对象,i,
并且a,
. 您还可以通过>,
和转移参数<,
。我确信还有其他插件可以做类似的事情。