在 HCL 块中排序 属性
Sort a property in HCL Block
我想像这样将 name
属性 移动到块的顶部。
一个文件中有很多resouce
块。
之前
resource "datadog_monitor" "A" {
enable_logs_sample = "true"
name = "name"
tags = ["env:dev"]
}
resource "datadog_monitor" "B" {
enable_logs_sample = "true"
name = "name"
tags = ["env:dev"]
}
之后
resource "datadog_monitor" "A" {
name = "name"
enable_logs_sample = "true"
tags = ["env:dev"]
}
resource "datadog_monitor" "B" {
name = "name"
enable_logs_sample = "true"
tags = ["env:dev"]
}
好的,我认为 :help :global
和 range/address 机制是 Vim 最好和最被低估的功能之一,因此它可能值得详细 运行 了解。
核心编辑模式与我在 中建议的命令相同:
- 在匹配特定正则表达式模式的每一行上,
- 做点什么。
请注意,这是一个“模式”,而不是 one-off 技巧。你不应该用心“学习”这个答案,或者将它提交给“肌肉记忆”,或者在你下次遇到完全相同的问题时将它加入书签。相反,您应该以一种允许您的方式理解其背后的逻辑:
- 认识到它可能会派上用场的情况,
- 不用想太多就去应用它。
所以,为了实现上面描述的编辑模式,我们使用:global
命令,它的工作原理是这样的:
:[range]global/<pattern>/[range]<command>
其中:
- in
range
(可选,默认为%
),
- 标记每行匹配
<pattern>
,
- 然后在
range
上执行 <command>
(可选,默认为 .
)。
与 Vim 中的许多内容一样,:global
在概念上很酷,但它本身不一定有用。越熟悉ranges/addresses,知道的Ex命令越多,越有用
在这种特定情况下,范围并不重要,但地址和 Ex 命令很重要……它们的总和使得这些问题可以在 IMO 中以一种非常直观的方式解决。
现在,让我们回到我们的问题:
move every "name" line to the top of the block
并用符合我们编辑模式的术语表达:
- 标记每行匹配
name
,
- 然后将其移动到匹配
resource
. 上方最近的行下方
这是一个简单的:
:g/name/m?resource?
当然,要使用的确切正则表达式模式是 context-dependent。
诀窍是将模式内化,这样您就已经知道如何使用您可能遇到的任何新构建块。
这里god-like真的什么都没有
我想像这样将 name
属性 移动到块的顶部。
一个文件中有很多resouce
块。
之前
resource "datadog_monitor" "A" {
enable_logs_sample = "true"
name = "name"
tags = ["env:dev"]
}
resource "datadog_monitor" "B" {
enable_logs_sample = "true"
name = "name"
tags = ["env:dev"]
}
之后
resource "datadog_monitor" "A" {
name = "name"
enable_logs_sample = "true"
tags = ["env:dev"]
}
resource "datadog_monitor" "B" {
name = "name"
enable_logs_sample = "true"
tags = ["env:dev"]
}
好的,我认为 :help :global
和 range/address 机制是 Vim 最好和最被低估的功能之一,因此它可能值得详细 运行 了解。
核心编辑模式与我在
- 在匹配特定正则表达式模式的每一行上,
- 做点什么。
请注意,这是一个“模式”,而不是 one-off 技巧。你不应该用心“学习”这个答案,或者将它提交给“肌肉记忆”,或者在你下次遇到完全相同的问题时将它加入书签。相反,您应该以一种允许您的方式理解其背后的逻辑:
- 认识到它可能会派上用场的情况,
- 不用想太多就去应用它。
所以,为了实现上面描述的编辑模式,我们使用:global
命令,它的工作原理是这样的:
:[range]global/<pattern>/[range]<command>
其中:
- in
range
(可选,默认为%
), - 标记每行匹配
<pattern>
, - 然后在
range
上执行<command>
(可选,默认为.
)。
与 Vim 中的许多内容一样,:global
在概念上很酷,但它本身不一定有用。越熟悉ranges/addresses,知道的Ex命令越多,越有用
在这种特定情况下,范围并不重要,但地址和 Ex 命令很重要……它们的总和使得这些问题可以在 IMO 中以一种非常直观的方式解决。
现在,让我们回到我们的问题:
move every "name" line to the top of the block
并用符合我们编辑模式的术语表达:
- 标记每行匹配
name
, - 然后将其移动到匹配
resource
. 上方最近的行下方
这是一个简单的:
:g/name/m?resource?
当然,要使用的确切正则表达式模式是 context-dependent。
诀窍是将模式内化,这样您就已经知道如何使用您可能遇到的任何新构建块。
这里god-like真的什么都没有