Кілька кратних методів in vim


9

Я досить часто використовую варіант складання vim , і зазвичай встановлюю foldmethod як синтаксис. Нещодавно я виявив, що можна додати спеціальні складки, такі, що я можу помістити цілі блоки, /*{{{*/і /*}}}*/це дуже корисно для групування великих розділів вихідного файлу разом. Однак для використання цієї функції мені потрібно встановити foldmethod як маркер, і я втрачаю складку синтаксису.

Чи можливо мати два активних методу fold одночасно у vim? set foldmethod=syntax,markerне працює.

Відповіді:


4

Ні, строго кажучи, неможливо, щоб у Vim було одночасно активовано декілька методів.

Ви можете імітувати складання на основі маркера, якщо ви готові навчитися писати правила виділення синтаксису та зламати файл виділення для мови, до якої потрібно додати емуляцію складання маркера. При цьому є кілька недоліків:

  1. Команди для створення / видалення складки ("zf", "zd" тощо), які працюють з маркерами та ручними методами складання, не працюватимуть, коли для методу fold встановлено значення "синтаксис".

  2. Емуляція маркерів, які "примушують" рівень складки (наприклад, " {{{1" / " }}}1") на відміну від збільшення / зменшення рівня складки на один (наприклад, " {{{" / " }}}"), є проблематичним; або вам доведеться повністю ігнорувати номери рівня складок, або ризикувати, що ви будете перешкоджати - і, можливо, порушувати - решта правил складання, заснованих на синтаксисі.

Я пропоную, коли вам знадобиться складання на основі маркера, ви використовуєте цей метод цілком. Це може зайняти трохи додаткового часу та зусиль, але якщо вам справді потрібна гнучкість, можливо, це варто, особливо враховуючи труднощі спроби поєднати їх.


2

Я шукав те саме. Оскільки я не хочу зламати файл синтаксису, натомість у мене є відображення для перемикання між foldmethods. Зараз я перемикаюся лише між синтаксисом і маркером:

nmap <Leader>ff :call <SID>ToggleFold()<CR>
function! s:ToggleFold()
    if &foldmethod == 'marker'
        let &l:foldmethod = 'syntax'
    else
        let &l:foldmethod = 'marker'
    endif
    echo 'foldmethod is now ' . &l:foldmethod
endfunction
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.