我使用了很多JSON。我想要在整个JSON块上操作是非常常见的 - 选择整个块,删除块,移动它等等。有没有办法对键及其值进行组合操作?
样机:
viB
这样的动作在这种情况下不起作用,因为它将选择同一巢级别中的所有子项(不是我想要的)。我想要完整的块,只有那个块,无论光标结束了什么。
答案 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,
。您还可以通过>,
和<,
转换参数。我确信还有其他插件可以做类似的事情。