подсветка синтаксиса в заголовке фальцовки VIM - PullRequest
9 голосов
/ 28 ноября 2009

Есть ли способ, чтобы VIM продолжал применять форматирование к строке, используемой в качестве заголовка для сгиба?

Например, у меня есть следующий код:

int foo(int a, int b) {
    int c;
....
}

В сложенном виде вижу:

+-- 4 lines: int foo(int a, int b) {----------------------------

Однако вся строка подсвечивается в соответствии с классом «Сложено». Есть ли способ отключить это, поэтому я продолжаю видеть подсветку синтаксиса?

[для простого примера это не так важно, но я также широко использую свертывание при просмотре больших файлов данных, и там мне гораздо важнее форматирование]


Ответы [ 2 ]

7 голосов
/ 28 ноября 2009

Однако вся строка подсвечивается в соответствии с классом «Сложено». Есть ли способ отключить это, поэтому я продолжаю видеть подсветку синтаксиса? "

Нет, сложенный текст заголовка не является текстом, который является частью файла и не может быть непосредственно отредактирован, он просто рассчитывается и накладывается на экран. Подсветка «Сложено» применяется ко всей линии, и ко всем сгибам применяется одинаковая подсветка.

Для моего использования с vim в качестве планировщика (в проекте VimOutliner) я взломал источник vim, чтобы учесть различную подсветку сгиба в зависимости от уровня сгиба, поэтому применяются несколько подсветок заголовка сгиба (например, FoldLevel1, FoldLevel2, так далее.). Я предполагаю, что можно было бы и дальше взломать использование уже существующего выделения текста в линии заголовка сгиба, но, учитывая то, как работает сворачивание, я подозреваю, что это может быть сложнее, чем кажется.

Извините, просто поразило меня, что предложение для метода отступа в любом случае может быть именно тем, что вы ищете, так как он сохраняет синтаксис в незаштрихованных строках, в то же время сохраняя их функцию своего рода заголовка для сложенного раздела.

5 голосов
/ 28 ноября 2009

Я думаю, что вам нужно изменить метод сгиба на отступ вместо ручного, что по умолчанию. Введите это в командном режиме.

:set foldmethod=indent

Теперь, если вы войдете в свою функцию foo и наберете zm (увеличьте уровень сгиба на единицу), это будет выглядеть так:

int foo(int a, int b) {
+--  2 lines: int c;------------------------------------------------------------
}

Строка foo будет по-прежнему иметь подсветку синтаксиса. Конечно, чтобы развернуть, введите zr. Для удобства я вставил следующие несколько строк в мой .vimrc, чтобы быстро сложить или развернуть все:

" Folding and unfolding
map ,f :set foldmethod=indent<cr>zM<cr>
map ,F :set foldmethod=manual<cr>zR<cr>

Здесь также есть хороший учебник здесь , и, конечно, чтение справки vim на методе foldmethod может привести вас к другим методам, которые вам нравятся лучше, чем indent, но из-за того, как выглядит пример кода, вы, вероятно, сделать отступ.

...