小编wat*_*sts的帖子

为什么 Vim 的 U 命令在更改行和删除行时工作方式不同?

我正在尝试理解UVim 中的命令。我的理解是,它会撤消仅影响最近更改的行的所有更改。但是,如果我从以下文件开始:

abc
def
ghi
Run Code Online (Sandbox Code Playgroud)

jxx向下导航并删除两个字符:

abc
f
ghi
Run Code Online (Sandbox Code Playgroud)

kgU2j将整个文档设置为大写:

ABC
F
GHI
Run Code Online (Sandbox Code Playgroud)

现在,U给出这个结果:

ABC
def
GHI
Run Code Online (Sandbox Code Playgroud)

如果我习惯kd2j删除整个文档而不是更改其大小写,U则不会有任何效果。我想知道为什么d被视为影响多行的命令,但gU似乎被忽略了。

是否有一种直观的方法来理解这种行为,或者这只是 Vim 的一个奇怪的边缘情况?

vim

5
推荐指数
1
解决办法
285
查看次数

我可以使用子查询动态选择一个变体键,而不需要展平表吗?

假设我有一个带有多个键的变体字段,在查询元数据表之前,我不知道哪个键会给我我关心的值。这是一个简化和人为的示例:

create table KEY_LOOKUP (
    key_name text,
    is_useful boolean
);

insert into KEY_LOOKUP values
    ('A', True),
    ('B', False);

create table DATA (
    key_values variant
);

insert into DATA
    select PARSE_JSON('{"A": "Useful Value", "B": "Useless Value"}');
Run Code Online (Sandbox Code Playgroud)

DATA表现在包含两个键,其中一个会给我我想要的值,而其中一个没有用。如果我事先知道这A是我需要的密钥,我可以简单地select key_values:A,但如果我事先不知道,我必须先查询KEY_LOOKUP

如果我想编写一个始终使用适当键的查询,我可以展平表并像这样提取相关值:

select b.value from DATA a, lateral flatten(input => a.key_values) b
where b.key in
     (select key_name from KEY_LOOKUP
         where is_useful);
Run Code Online (Sandbox Code Playgroud)

但这有几个缺点。它很慢,语法冗长且(对我而言)不直观,并且在表展平后处理聚合很尴尬,尤其是当我为多个键执行此操作时。

理想情况下,我很想写这样的东西:

select key_values:{select key_name from KEY_LOOKUP where is_useful}
from DATA
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法?

sql snowflake-cloud-data-platform

0
推荐指数
1
解决办法
57
查看次数

标签 统计

snowflake-cloud-data-platform ×1

sql ×1

vim ×1