Как я могу сложить элементы YAML в VIM? - PullRequest
10 голосов
/ 09 июля 2010

У меня есть текстовый файл в формате 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 ---

Любые предложения приветствуются!Спасибо!

Ответы [ 2 ]

5 голосов
/ 09 июля 2010

Do

%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---------------------------
2 голосов
/ 09 июля 2010

Если вы хотите все время использовать метод складывания, отличный от «ручного», добавьте эту строку в ~ / .vimrc:
установить сложенный метод = сложение

Я бы порекомендовал использовать foldmethod = indent. Это будет складываться на основе любого отступа. Затем, если вы измените свой ввод, чтобы включить отступы, где вы хотите, чтобы произошло сгибание. Например, если вы измените свой ввод на

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

Он сложится, как вы описали

...