Зробіть 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(