Как я могу повторить свертывание кода Vim?

28

Свертывание кода в Emacs

Иногда я хочу сложить блок текста. В Vim вы легко складываетесь без пуха. Без добавления каких-либо специальных символов, таких как «маркеры» или конкретного регулярного выражения, как {{{. Я хотел бы выбрать регион и сложить его, не мешая со структурой.

Оглядываясь вокруг, кажется, уже были вопросы о свертывании кода в Emacs. Кто-то сказал, что «идеального решения не было». Например, я создал клип простого кодирования в Vim:

Vim обычный складной

введите описание изображения здесь

+ Довольно просто, выберите регион и сложите его.
+ Это постоянно. Когда вы убьете буфер / закроете Vim. И снова откройте файл, сгибы все еще там.
+ Вы получаете полосу выделения, чтобы легко увидеть, что сложено.

Есть много других конфигураций складывания для Vim. Я доволен Emacs, но это одна вещь, по которой я скучаю. Другие альтернативы, которые я пробовал, например HideShow:

HideShow

введите описание изображения здесь

Альтернатива зла с hide-show minor mode. Я нашел это непригодным

- Я не могу выбрать регион и свернуть его. Он складывается на блоки кода.

- Там нет ни одного бара для бара или чего-то другого, чтобы присутствовать на нем, он свернут. Вы можете легко пропустить это.

- Это не настойчиво. Если вы снова откроете файл, сгибы исчезнут.

Есть еще один пакет, сложите это :

Сложите это

введите описание изображения здесь

- Это красивая альтернатива. Однако, это портит отступ, потому что текст под сгибом помещается рядом с сгибом ... (?).

- Он может просто визуально выбрать регион и сложить его. Но это нарушает неопределенность, поэтому обзор запутался. Не очень удобно.

- Там нет ни одного бара для бара или чего-то еще, чтобы присутствовать на нем, он свернут. Вы можете легко пропустить это.

В чем проблема?

Я хотел бы повторить, как Вим делает фолд. Но когда я искал вокруг, кажется, что это очень сложно сделать в Emacs. Так что мне интересно, есть ли что-то в emacs или его архитектуре, которое мешает воспроизвести это? Каковы пределы?

ReneFroger
источник
2
Я чувствовал, что вопрос был слишком широким, поэтому я проголосовал за его закрытие. Я бы порекомендовал оригинальному постеру выбрать пару библиотек, которые предоставляют некоторые из требуемых функций, а затем объединить / изменить их по своему желанию. Если у ОП возникают проблемы с реализацией / изменением определенной функции , тогда опубликуйте конкретный вопрос, ограниченный этой одной проблемой. ОП может, вероятно, достичь желаемых визуальных эффектов, но должен быть готов сделать его постоянным проектом, над которым нужно будет работать со временем.
юрист
3
Не могли бы вы объяснить, какие функции складывания вы хотите? Как правило, вы не можете ожидать, что люди на этом сайте узнают, как работает свертывание кода Vim, и в любом случае вы должны сообщить нам, какие функции вы хотите конкретно. Единственная информация, которую вы предоставляете о том, что вы хотите, - это анимация, которая показывает только один пример, и в любом случае я понятия не имею, что она иллюстрирует: они не показывают, какие команды вы использовали, почему вы переместили курсор в ту или иную точку и т. Д. Плюс в типичном браузере они играют по циклу, и невозможно сказать, когда начинается повтор.
Жиль "ТАК ... перестать быть злым"
3
трюм должен быть удален из этого вопроса. в его нынешнем виде это довольно специфично. отсутствие ответа на вопрос не является веской причиной, чтобы закрыть его.
Иста
2
ar-hide-region-atpt, ar-show-region-atpt из 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils - пожалуйста, снимите блокировку, чтобы может быть обычный ответ.
Андреас Рёлер
1
Вопрос, насколько я понимаю, в основном таков: « Кто-то: напишите, пожалуйста, целую библиотеку для Emacs, которая предоставит точные функции свертывания кода, найденные в Vim. » Я вижу из некоторых комментариев и голосований, что достаточно люди, которые хотели бы, чтобы это стало реальностью. Однако я не понимаю, как это могло бы вписаться в ответ - предложенная новая библиотека должна быть сохранена, с проблемами и исправлениями ошибок. Я тоже не против того, чтобы кто-то писал целую библиотеку с новыми замечательными функциями для свертывания кода
юрист

Ответы:

16

Попробуй vimish-fold.

особенности

  • батарейки в комплекте: активируйте второстепенный режим, свяжите пару команд и все будет просто работать;

  • работает в выбранных вами регионах;

  • он постоянен: при закрытии файла ваши складки не исчезают;

  • Помимо того, что он постоянный, он хорошо масштабируется, вы можете работать с сотнями файлов с большим количеством сгибов без каких-либо побочных эффектов;

  • очевидно, какие части текста сложены;

  • это не ломает отступ или что-то;

  • он может складывать только развернутые складки (о мой);

  • для любителей avyпакета: вы можете использовать avyдля свертывания текста с минимальным количеством нажатий клавиш!

использование

Создайте привязку для некоторых из / всех этих функций:

  • vimish-fold - базовая складка выбранного региона;

  • vimish-fold-unfold- вам не нужно связывать это, просто используйте, C-gкогда точка находится на заголовке, представляющем сложенный текст;

  • vimish-fold-unfold-all - тем не менее это может быть полезно;

  • vimish-fold-refold - да, вы можете сложить его обратно;

  • vimish-fold-avy- используйте, avyчтобы сложить текст!

Вы можете включить vimish-fold-modeвыборочно для режимов, где вы хотите иметь постоянное сворачивание, или просто активировать его везде:

(vimish-fold-global-mode 1)
Марк Карпов
источник
у вас есть какие-либо предлагаемые сочетания клавиш? Какие привязки вы используете, когда находитесь в режиме C ++? С режимом? Режим Python? Режим Lisp? Режим ELisp? Режим JavaScript?
Reb.Cabin
1
@ Reb.Cabin, это не пакет, зависящий от режима, поэтому глобальные привязки клавиш - лучший выбор. Я использую привязки клавиш, которые не связаны с аккордами клавиш, и большинство людей сочли бы их немного странными, в настоящее время у меня есть: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. Большинство моих сочетаний клавиш такие, это мой конфиг .
Марк Карпов
Это объединяется со злыми движениями и текстовыми объектами?
PythonNut
1
Хм ... Я начну работу по пиару.
PythonNut
1
Я, например, считаю Vimish-Fold совершенно непригодным для использования. Может быть, это интуитивно понятно тем, кто уже знаком со сворачиванием кода в vim ... Я не знаю. Кроме того, я не понимаю, почему сворачивание в режиме org работает так хорошо, но в Emacs пока нет хорошего свертывания кода ...
kjo