如何在VIM中折叠YAML项目?

wkr*_*nec 12 vim yaml folding

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

---
title: My Title
attr1: value1
attr2: value2
---
title: Next Item
attr1: value3
---
title: One More Item
...
Run Code Online (Sandbox Code Playgroud)

我希望得到的折叠文本看起来像这样:

+---- 2 lines: My Title ----
+---- ? lines: Next Item ---
Run Code Online (Sandbox Code Playgroud)

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

spa*_*azm 6

查看 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(如果您愿意)。


Eri*_*rce 5

如果你想一直使用“手动”以外的折叠方法,请将此行添加到你的 ~/.vimrc 中:
set Foldmethod=foldoption

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

---
title: My Title
    other attrs: other values
---
title: Next Item
---
title: One More Item
...
Run Code Online (Sandbox Code Playgroud)

它将按照您所描述的方式折叠


ZyX*_*ZyX 5

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

要么

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

这将在每个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
...
Run Code Online (Sandbox Code Playgroud)

折叠:

+--  4 ?????: --- My Title-----------------------------
+--  3 ?????: --- Next Item----------------------------
+--  3 ?????: --- One More Item------------------------
Run Code Online (Sandbox Code Playgroud)

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
...
Run Code Online (Sandbox Code Playgroud)

折叠:

+--  5 ?????: My Title--------------------------------
+--  4 ?????: Next Item-------------------------------
+--  4 ?????: One More Item---------------------------
Run Code Online (Sandbox Code Playgroud)