Як я можу встановити foldlevelstart в vim, щоб спочатку нічого не скласти, все ще дозволяючи zr працювати негайно?


8

В Vim, я зазвичай встановлюється foldmethodв indentбільшості типів файлів. Взагалі, мені подобається, щоб файли відкривалися з усіма складками. Однак корисно починати негайно використовувати, zmщоб почати закривати складки у всьому світі через файл, один за одним, що дозволяє мені бачити загальну структуру файлу без деталей.

Єдине загальне рішення, яке я знайшов, - це встановити foldlevelstartдуже велику кількість, наприклад 99, щоб переконатися, що всі файли (маючи на увазі різні файли з різним рівнем максимального відступу) починають повністю розгортатися. Однак мені доведеться zmкілька разів використовувати, щоб зменшити foldlevelдо максимального рівня складки файл, як правило, набагато менше 99, що громіздко і непрактично. Я можу встановити foldlevelвручну за допомогою командного рядка vim, але мені все одно потрібно знати максимальний відступ у файлі.

Чи є практичний спосіб відкрити файл із foldlevelвстановленим рівним рівнем більше максимального поточного відступу / згину у самому файлі?

Наприклад, з урахуванням наступного файлу:

a
  b
    c
      d1
      d2
    e
      f1
      f2

Перше натискання клавіші zmпоказало б це:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------

(Однак зауважте, що він повинен працювати для загального випадку, коли початковим максимальним відступом файлу може бути будь-яке значення).


1
Ви плутаєте zrз zm; останній зменшує складку.
Інго Каркат

@IngoKarkat, ти маєш рацію, я. Вибачте за плутанину - я завжди вважаю ці ключові комбінації контрінтуїтивними. Я виправив своє запитання.
Ендрю Фер’єр

"Я завжди знаходжу ці ключові комбо-контр-інтуїтивні". Це повинно означати zm= скласти більше (відняти foldlevel) і zr= скласти менше (додати foldlevel)
wisbucky

Відповіді:


9

Це знаходить найвищий складний рівень у поточному файлі:

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

Щоб встановити це автоматично, ви можете використовувати :autocmd:

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

1
Інго, ідеально, саме це я шукав. Дякую. У сорому foldlevelstartнемає такої можливості.
Ендрю Фер’є

Схоже, це не працює на Cygwin Vim. Моє foldlevel0 і foldlevelstartстановить -1, коли я запускаю файл із тими налаштуваннями.
CMCDragonkai

0

Замість використання zrвикористовуйте zR, що відкриє всі складки. Так само zMзакриє всі складки.


Гері, дякую. Це близько, але не робить те, що я описую. Я хотів би команду, яка знижує рівень складання лише на один, але з максимального рівня складки, відповідного для відповідного файлу. Для цього мені потрібно використовувати zM, щоб зменшити рівень складання до 0, а потім кілька разів zr, щоб відкрити більше деталей. Я шукаю одну комбінацію команд / клавіш.
Ендрю Фер’єр

2
Ви можете зробити zR(встановити foldlevel на найвищий рівень), тоді zmбуде працювати. Це лише один додатковий крок.
wisbucky

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.