Зробіть set foldmethod=exprі використовуйте 'foldexpr'для встановлення виразу скрипту vim, який визначатиме початкові точки складання.
set foldmethod=expr
set foldexpr=get(split(getline(v:lnum-1)),0,'')!=get(split(getline(v:lnum)),0,'')?'>1':'='
Це виглядає складніше, ніж це є, тому що ми не можемо легко використовувати пробіли в :set, але з пробілами та новим рядком або 2, це виглядає так:
get(split(getline(v:lnum - 1)), 0, '') != get(split(getline(v:lnum)), 0, '')
\ ? '>1'
\ : '='
Огляд
В основному це порівнює перше слово кожного рядка з попереднім рядком. Якщо слова різні , то лінія почати складки, >1. В іншому випадку вона зберігає той же рівень фолд, =.
Слава деталей
set foldmethod=expr сказати Vim використовувати вираз скрипту vim для визначення складок
'foldexpr' опція містить вираз сценарію vim
- Оцінка умови за допомогою потрійного верстата, який повертається,
>1коли слід починати складку і =коли рівень складки повинен тривати
v:lnum- це поточний рядок, який 'foldexpr'працює для оновлення складок
- Отримайте вміст поточного рядка (
v:lnum) та попереднього рядка ( v:lnum - 1) черезgetline()
- Розділіть кожен рядок на слова через
split()
- Використовуйте
get()для отримання першого індексу свіжорозділених слів
- Використовуйте значення за замовчуванням
''у випадку порожнього рядка. напрget(words, 0, '')
- Порівняйте перше слово поточного рядка з першим словом попереднього рядка в умові частини потрійного
Примітка. Цей метод може мати певні проблеми з продуктивністю дуже великих документів
Докладнішу інформацію див.
:h 'foldmethod'
:h 'foldexpr'
:h getline(
:h v:lnum
:h split(
:h get(