繁体   English   中英

如何在 VIM 中折叠 YAML 项目?

[英]How can I fold YAML items in VIM?

我有一个 YAML 格式的文本文件,想为 VIM 定义自定义折叠,但我不知道如何去做(尽管阅读了折叠的 VIM 文档)。 该文件由 YAML“文档”组成,如下所示:

---
title: My Title
attr1: value1
attr2: value2
---
title: Next Item
attr1: value3
---
title: One More Item
...

我希望生成的折叠文本看起来像这样:

+---- 2 lines: My Title ----
+---- ? lines: Next Item ---

任何建议表示赞赏! 谢谢!

%s/---\(.*\)\(\_.\{-}title: \)\(.*\)/---\1 #{{{1 \3\2\3/g
set foldmethod=marker

或者

%s/\(---\_.\{-}title: \)\(.*\)/#{{{1 \2\r\1\2/g
set foldmethod=marker

这将在每个 YAML 文档的开头添加带有标题的注释,并使文档仍然有效。 foldmarker 选项必须保持不变。

结果:

1.

--- #{{{1 My Title
title: My Title
attr1: value1
attr2: value2
--- #{{{1 Next Item
title: Next Item
attr1: value3
--- #{{{1 One More Item
title: One More Item
...

折叠:

+--  4 строк: --- My Title-----------------------------
+--  3 строк: --- Next Item----------------------------
+--  3 строк: --- One More Item------------------------

2.

#{{{1 My Title
---
title: My Title
attr1: value1
attr2: value2
#{{{1 Next Item
---
title: Next Item
attr1: value3
#{{{1 One More Item
---
title: One More Item
...

折叠:

+--  5 строк: My Title--------------------------------
+--  4 строк: Next Item-------------------------------
+--  4 строк: One More Item---------------------------

如果您想一直使用“手动”以外的折叠方法,请将此行添加到您的 ~/.vimrc 中:
设置折叠方法=折叠选项

我建议使用 foldmethod=indent。 这将根据任何缩进折叠。 然后,如果您更改输入以包含您希望折叠发生的缩进。 例如,如果您将输入更改为

---
title: My Title
    other attrs: other values
---
title: Next Item
---
title: One More Item
...

它会像你描述的那样折叠

查看 pedro 的 yaml-vim-plugin 以改进与您的确切要求相匹配的折叠。

pedro 的博客上阅读有关该插件的更多信息,或直接在 github 上以pedrohdz/vim-yaml-folds 的形式找到它

YAML 文件的默认 Vim 折叠规则对我来说总是有点眼疲劳。 折叠命令的行为也不像人们期望的那样。 在下面的解释部分中更多地了解所有这些。

这让我把一个快速简单的 Vim 插件放在一起,以更干净地处理 YAML 折叠,vim-yaml-folds。 这是安装了 vim-yaml-folds 后 YAML 折叠的样子: 来自博文的折叠 yaml 示例

折叠包含 YAML 部分的开头,其中包含其下方的所有内容。

如果你知道我在说什么并且不关心解释,如果你愿意,可以跳过解释并安装 vim-yaml-folds。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM