我有一个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 ---
任何建议表示赞赏!谢谢!
答案 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折叠的样子:
折叠包含YAML节的开头,其中包括下面的所有内容。
如果您知道我在说什么并且不关心任何解释,请随时跳过该解释,并根据需要安装vim-yaml-folds。