Я фанат способа, которым Atom и Sublime Text обрабатывают сгибание строк, когда первая строка каждого сгиба видима (завершена подсветкой синтаксиса), и к концу строки, указывающей сгиб, добавляется маркер.
См. Скриншот ниже, сравнивающий отступ в Vim (вверху) и Atom (внизу):
Vim посвящает две строки для каждого сгиба. Первая строка служит заголовком, а вторая строка описывает некоторую информацию о сгибе (количество строк и текст внутри сгиба).
Atom использует только одну строку и использует маленький маркер в конце строки для обозначения сгиба вместе с цветом, добавленным к номерам строк слева. Складной стиль Atom использует меньше экранного пространства, но все же передает всю информацию, которая мне действительно нужна.
Я неравнодушен к складному стилю Atom. На мой взгляд, он выглядит чище и последовательнее, особенно при перечислении нескольких методов или атрибутов подряд (как на скриншоте выше).
Есть ли способ примерно приблизить стиль складывания Atom в Vim?
from __future__ import braces
) ... Как вы настроили складывание? И вы можете вставить этот фрагмент кода (или другой, который демонстрирует проблему)? Vim сбрасывает на одну строчку, но, как уже упоминалось, ваши сгибы начинают линию поздно.Ответы:
Две линии против одной линии
В Vim все строки в сгибе будут свернуты в одну строку, и
'foldtext'
затем параметр определяет синопсис этих строк (обычно штрихи, количество сложенных строк и содержимое из первых (или всех) строк).В вашем примере, в Vim
{...}
свернут только сам блок параметров; строка выше (которая использует параметры) не является частью сгиба. Напротив, в другом редакторе эта строка, использующая параметры, принадлежит к сгибу, а ее сгибный текст (если использовать терминологию Vim) - это содержимое этой строки плюс добавленный маркер.адаптация
В Vim складки могут генерироваться различными способами (см.
:help fold-methods
) И зависят'filetype'
от буфера. Сложность включения вышеупомянутой линии в сгиб зависит от этого; проверить с:setlocal foldmethod?
. При складывании отступа вы не можете повлиять; Вы должны переключиться на другой метод. Для свертывания синтаксиса это означало бы адаптацию определений синтаксиса и может быть очень сложным. Вам повезет больше, если использовать выражение , но это все равно будет означать понимание и изменение логики. (Маловероятно, что автор плагина filetype предоставил конфигурацию, чтобы повлиять на это.)Подсветка синтаксиса согнутой строки
К сожалению, это невозможно вообще. Vim всегда использует группу
Folded
выделения для всей сложенной строки. Вы можете настроить это с помощью своих:highlight
команд~/.vimrc
, но индивидуальная дифференциация синтаксиса будет потеряна.источник
Vim уже отображает сгибы одной строкой. Однако при
indent
сворачивании Vim все линии с одинаковым отступом включаются в сгиб. Таким образом, на скриншоте строки, которые вы называете «заголовками» (например, начинающимиcollection_base_url
), не находятся в пределах сгиба.Вы можете добиться чего-то похожего на свертывание Atom, используя Vim
foldexpr
foldmethod
:Это определяет выражение сгиба (см.
:help fold-expr
) Следующим образом:"<N"
, в которой для N задан отступ. Это говорит Vim, что сгиб уровня N заканчивается на этой линии.Обновить
@alxndr спрашивает в комментариях, возможно ли расширить это, чтобы включить устаревшие
end
s Руби в сгибы. Вы можете начать с замены" Calculate indent level
раздела следующим:На самом деле это не самое надежное решение (например, оно потерпит неудачу, если
end
оператор находится в той же строке после точки с запятой). Вы можете настроить регулярное выражение и окружающий код для решения этой проблемы, но, поскольку вы сейчас находитесь в сфере анализа фактического синтаксиса файла, я подозреваю, что все может стать намного сложнее, прежде чем у вас будет хорошее решение.источник
end
для завершения блока?...
в конце строки как символ свернутого текстового блока, очень полезен и отвлекает меньше, чем нужно выделять всю первую строку текстового блока, как в vim. Я пробовал ваш фолд выше с поведением фолда vim по умолчанию, просто не работает. Как сделать сгиб, который дает отметку в конце первой строки текстового блока с помощью python? Должен ли я открыть новый вопрос? Я просто проверяю ваш фолд, это действительно хорошо работает с отступом. супер спасибо.