Я имею файл форматированного текста 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 ---
Любые предложения ценятся!Спасибо!
Do
%s/---\(.*\)\(\_.\{-}title: \)\(.*\)/---\1 #{{{1 \3\2\3/g
set foldmethod=marker
or
%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
...
Folded:
+-- 5 строк: My Title--------------------------------
+-- 4 строк: Next Item-------------------------------
+-- 4 строк: One More Item---------------------------
Если вы хотите постоянно использовать метод сворачивания, отличный от «ручного», добавьте эту строку в свой ~ / .vimrc:
set foldmethod = foldoption
Я бы рекомендовал использовать foldmethod = indent. Это будет складываться на основе любого отступа. Затем, если вы измените свой ввод, чтобы включить отступы, где вы хотите, чтобы произошли складки. Например, если вы измените свой ввод на
---
title: My Title
other attrs: other values
---
title: Next Item
---
title: One More Item
...
, он будет свернут, как вы описали