如何在VIM中折叠YAML项目?

时间:2010-07-09 11:47:03

标签: vim yaml folding

我有一个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 ---

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

3 个答案:

答案 0 :(得分:5)

待办事项

%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---------------------------

答案 1 :(得分:2)

  

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

我建议使用foldmethod = indent。这将基于任何缩进折叠。然后,如果您更改输入以包含要在其中进行折叠的缩进。例如,如果您将输入更改为

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

它会按照你描述的那样折叠

答案 2 :(得分:1)

请查看pedro的yaml-vim-plugin,以改进折叠效果,使其符合您的确切要求。

详细了解有关该插件的信息 pedro's blog或直接在github上找到pedrohdz/vim-yaml-folds

  

YAML文件的默认Vim折叠规则对我来说总是有点麻烦。折叠命令的行为不像人们期望的那样。有关更多信息,请参见下面的“说明”部分。

     

这使我得以将一个快速简单的Vim插件组合在一起,以更干净地处理YAML折叠,即vim-yaml-folds。这是安装了vim-yaml-folds的YAML折叠的样子:folded yaml example from blogpost

     

折叠包含Y​​AML节的开头,其中包括下面的所有内容。

     

如果您知道我在说什么并且不关心任何解释,请随时跳过该解释,并根据需要安装vim-yaml-folds。