[英]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 部分的开头,其中包含其下方的所有内容。
如果你知道我在说什么并且不关心解释,如果你愿意,可以跳过解释并安装 vim-yaml-folds。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.