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

13

Какие пакеты доступны для модального редактирования в Emacs? Что вы используете и почему?

Давайте попробуем опубликовать один пакет за ответ. Предлагаю упомянуть преимущества и недостатки каждой упаковки.


Вот мое определение модального редактирования (я не смог найти отдельную статью в Википедии):

Модальное редактирование - стиль редактирования текста, когда пользователь периодически переключается между «обычным режимом», когда клавиши не вызывают вставку своих символов, но выполняют различные операции над текстом, и «режимом вставки», когда клавиши вставляют соответствующие символы. Там может быть больше режимов, конечно. Большинство современных редакторов не являются модальными. Примером модального текстового редактора является Vi (Vim).

Марк Карпов
источник
А что такое "модальное редактирование"?
Lindydancer
@Lindydancer, я добавил свою попытку объяснить концепцию вопроса.
Марк Карпов

Ответы:

13

evil, То Е xtensible В.И. л Эйер для Emacs

Помимо сомнительного названия, evilэто текущее состояние дел, когда дело доходит до vimэмуляции в Emacs (и, возможно, в любом другом месте, если на то пошло). Он поддерживает множество функций, от которых отказываются другие пакеты эмуляции Vim, включая:

  • vim textobjects
  • vim регистры
  • vim макросы клавиатуры
  • ex команды

преимущества

  • Совместимость с ключом vimозначает, что вы не потеряете мышечную память при переходе на системы без Emacs.
  • Очень зрелый и широко используемый (например, множество пакетов сообщества)
    • Многие пакеты vimбыли портированы на evil.
  • vim грамматика стиля является модульной и очень хорошо подходит для расширения пользователя
  • evil само по себе очень расширяемо: создавайте свои собственные текстовые объекты, операторы и движения!

Недостатки

  • Вероятно, потребуется немного поиграть, чтобы он хорошо играл с другими пакетами
    • К счастью, evilделает самые распространенные варианты использования смехотворно легкими.
  • evilэто очень сложная система. Взлом на ядре зла может стать довольно сложным делом.
  • vimсочетания клавиш не обязательно эргономически оптимальны. Иногда они могут чувствовать себя немного произвольно при переносе в другую систему.
  • Размещенный на BitBucket (Mercurial) сделать из этого, что вы будете.
PythonNut
источник
Я нашел аббревиатуру зла для расширяемого слоя vi для Emacs немного дурного вкуса.
Имя
@ Имя не моя идея, но как так?
PythonNut
из словаря: зло = глубоко безнравственный и злобный, воплощающий или связанный с силами дьявола, вредный, крайне неприятный, ...
Имя
5
@ Называйте кого-то, кто дал ему имя «Имя», я думаю, вы бы по достоинству оценили использование юмора при названии вещей. :-) В случае со Злом это ирония (см. En.wikipedia.org/wiki/Irony#Definitions ). Я считаю, что это одно из лучших имен, когда-либо дававшихся пакету Emacs, и назвал бы это преимуществом!
Тарсиус
@PythonNut Я думаю, что использование Bitbucket представляет собой меньшую проблему (на самом деле никакой проблемы), чем использование Mercurial.
Tarsius
11

Существует god-mode( https://github.com/chrisdone/god-mode ), который использует стандартные привязки клавиш Emacs, но устраняет необходимость удерживать модификаторы. Когда включен режим God, C-...привязки не требуют модификатора, а M-...привязки используют префикс, а не модификатор.

Как пример со страницы github:

До: Cp Ck Cn M- ^) Cj Cy Мистер Cx zz M-2 Mg Mg Cx Cs

После: pkng ^) югр. , 2 ггкс

Стефан
источник
1
Пожалуйста, расширьте свой ответ, чтобы это была не просто ссылка.
Марк Карпов
@ Стефан - я позволил себе немного расширить ваш ответ. Не стесняйтесь менять, как хотите.
глюкас
глюк: спасибо! @Mark: не зная ничего о моде бога, я не мог легко расширить свой ответ. Я отправил это в надежде, что кто-то как глюки заполнит пробелы.
Стефан
6

Добавляю свою, спасибо @Mark за поддержку.

Xah Fly Keys

Разработанный с нуля для emacs, с целью быть наиболее эффективной системой, из многолетнего опыта работы в режиме ergoemacs. Ключевые варианты выбора основаны на науке в максимально возможной степени, основаны на статистике частоты и ключевой легко нажимаемой оценки. Наиболее часто используемые команды отображаются на наиболее простые для нажатия клавиши. Другие вопросы, такие как группировка и биграмма связывания клавиш, также рассматриваются в течение 3 лет еженедельного эксперимента.

Интересные моменты:

  • Все команды Cx выполняются в последовательности от 2 до 3 отдельных клавиш. В xah-fly-keys Cx никогда не нужен. М- никогда не нужно ни.
  • Не конфликтует ни с какими ключами GNU emacs, потому что не связывает Ctrl или Meta (кроме C-7, C-8, но не обязательно). Вы можете включить xah-fly-keys в режиме вставки и использовать GNU Emacs, как обычно.
  • Также рассматривается, какой набор команд приводит к максимальной эффективности редактирования. Итак, пакет использует ~ 80 пользовательских команд редактирования. (например, copy будет копировать текущую строку, если выбора нет. Одна команда для переключения регистра букв вместо ~ 6 вариантов GNU Emacs в верхнем / нижнем / region / no-region.)
  • Реализация максимально проста. Никаких макросов, никаких советов, никаких сложных перераспределений ключей, используется только пара хуков. (хорошо или плохо?!)

Недостатки:

  • Как и при первом знакомстве с vi, вам понадобится один месяц для принятия.
  • Не очень известен. Только что выпущен для публичного использования в этом месяце.
  • В настоящее время поддерживается только макет Dvorak.
  • Нет удобной ключевой диаграммы для обучения (пока).
  • Для основных режимов вам все еще нужно использовать Cc. (Таким образом, вы можете использовать другие пакеты, такие как God-Mode или Hydra, чтобы решить эту проблему.)

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

Ха Ли
источник
Есть ли шанс, что вы будете поддерживать другие раскладки клавиатуры? Я знаю, что ErgoEmacs делает. Я мог бы попробовать, но планка перехода на Дворак слишком высока для случайного эксперимента.
PythonNut
@PythonNut да, высший приоритет. Надеюсь через неделю. Главное, понять, как я хочу это реализовать.
Xah Lee
Ах. Очень круто. Я поверну его, когда он выйдет.
PythonNut
6

Модалка должна быть самым новым ребенком в модальном блоке редактирования. Проект github, кажется, всего 10 дней. У меня недостаточно времени для комментирования или оценки, но вот как это описано:

Это строительный комплект, помогающий переключиться на модальное редактирование в Emacs. Основная цель пакета - сделать модальное редактирование в Emacs максимально естественным и естественным. Здесь нет взлома, угловых случаев, эмуляции - просто начните редактировать по своему усмотрению.

Документация также сравнивает и противопоставляет Modalka с другими общими модальными решениями, такими evil, god-mode, boonи т.д.

Пользователь Emacs
источник
4

благодеяние

Boon - один из менее известных пакетов для модального редактирования. Он не эмулирует Vi (или Vim), но обеспечивает оригинальную раскладку, оптимизированную для раскладки клавиатуры Colemak.

Преимущества и принципы дизайна

  • Во-первых, пространственное распределение, затем мнемоника: распределение клавиш для команд в приоритетном порядке зависит от расположения клавиш на клавиатуре. Все, что напечатано на колпачке клавиатуры, является второстепенной задачей

  • Легкие рулоны пальцев: обычная комбинация должна быть чередованием левой / правой руки или легкими рулонами одной рукой.

  • Использование домашнего ряда и сильных пальцев для наиболее часто используемых команд

  • Простая навигация: многие команды связаны с навигацией. Это облегчает передвижение. Поскольку движения удваиваются как определения регионов, это делает команды манипуляции (операторы) более мощными.

Недостатки

  • Вам необходимо заново изучить, как взаимодействовать с редактором, поскольку коллекция редактирующих примитивов и их размещение на клавиатуре довольно уникальны.
Марк Карпов
источник
1
Звучит немного странно, что Бун на самом деле не заботится о том, что находится на ключе, но заставляет ключи быть Колемаком. Похоже, это должно быть независимым от макета.
PythonNut
@PythonNut, я думаю, что людям нужно как-то ссылаться на ключи :-) Я думаю, что вполне возможно заставить его работать с другими макетами.
Марк Карпов
У Boon теперь есть поддержка QWERTY и QWERTZ, см. Github.com/jyp/boon#installation . Я обновил ответ, чтобы отразить это.
Раджу-Горький
3

Ergoemacs также поддерживает модальное редактирование. Он не эмулирует vi, но использует клавишу Alt для наиболее часто используемых команд. Например, движущимся курсором является Alt плюс правая инвертированная буква T (в QWERTY это Alt+ jдля left, Alt+ lдля правой, Alt+ iдля upи Alt+ kдля down). Удаление символа или слова производится Altлевой клавишей домашнего ряда. Выбор клавиш основывается на частоте команд и положении клавиш для удобства нажатия.

  • Чтобы начать модальное редактирование, пользователь может нажать f6.
    • После f6нажатия наиболее часто используемые клавиши больше не требуют сочетания клавиш Alt.
    • Поэтому на QWERTY jесть left, jесть right, iесть upи нет k).
  • Режим модальной команды вышла нажатие return, f6или escape.

В дополнении к традиционной модальной парадигме, существует квази модальная парадигма , которая позволяет любому C-xили C-cкомбинации клавиш , чтобы быть достигнута без использования каких - либо модификаторов (например , режим бога).

  • Квазимодальный режим запускается с QWERTY apps fдля C-cпри нажатой клавише управления и QWERTY apps dдля C-x.
  • При завершении этой последовательности appsклавиш клавиша изменит тип модификаторов, которые, как предполагается, будут нажаты.
  • После вызова команды ergoemacs возобновляет режим редактирования.
  • Во время любой последовательности клавиш вы также можете изменить типы клавиш, которые удерживаются. Это просто нажав appsклавишу еще раз.

В дополнение к изменению командных клавиш, ergoemacs-mode позволяет вам изменить последовательность клавиш при ее наборе:

  • Вы можете редактировать префиксный аргумент в середине последовательности клавиш, нажав f2.
  • Нажатие backspaceвозвращает последнюю нажатую клавишу.
  • Apps позволяет менять клавиши, удерживаемые во время любой последовательности клавиш.

ergoemacs-mode также пытается уважать все, что режим делает с основными ключами. Например, если org-mode определяет специальный ключ для next-line, ergoemacs использует эту команду для Alt+ kв режиме org-mode.

Преимущества:

  • Часть GNU Emacs, в ELPA.
  • Поддержка «универсальных» ключей Windows / Linux из коробки. например, Открыть ( C-o), Закрыть ( C-w), Выбрать все ( C-a), Копировать ( C-c), Вырезать ( C-x), Вставить ( C-v) и т. д.
  • Довольно популярный.
  • Поддерживает множество макетов, включая Qwerty, dvorak, colemak, bepo и многие другие международные макеты, которые настраивают ключи так, чтобы они находились в домашнем ряду (Mi в QWERTY будет Mu в colemak).
  • Показывает изображение вашей раскладки клавиатуры в emacs, описывая тему.
  • Ключи настраиваются через систему расширений, путем создания темы.
  • Вы можете установить любую произвольную модальную раскладку (еще не документированную).

Недостатки:

  • Стабильный медленно при запуске.
    • В нестабильном мастере первый запуск происходит медленно (~ 5 секунд для минимальной настройки), (~ 20 секунд для моего запуска)
    • Второй запуск происходит намного быстрее (для моей сложной установки это ~ 4 секунды).
    • Это связано с тем, что режим ergoemacs изменяется и кэширует каждую активную раскладку ключей в emacs. При втором запуске эти настройки сохраняются.
  • Сложный код.

Смотрите https://github.com/ergoemacs/ergoemacs-mode

Мэтью Фидлер
источник
2

Другой полу-модальный вариант - это Hydra:

https://github.com/abo-abo/hydra

По данным сайта

Представьте, что вы связали Cc j и Cc k в вашей конфигурации. Вы хотите вызвать Cc j и Cc k в некоторой (произвольной) последовательности. Гидра позволяет вам:

  • Свяжите свои функции таким образом, чтобы нажатие Cc jjkk3j5k эквивалентно нажатию Cc j Cc j Cc k Cc k M-3 Cc j M-5 Cc k. Любой ключ, кроме j или k, выходит из этого состояния.

  • Присвойте пользовательскую подсказку этой группе функций, чтобы сразу после нажатия Cc вы знали, что вы можете выполнить j или k.

Я не использовал это, но это кажется интересным.

Мэтью Фидлер
источник