Intereting Posts
Регистрируется ли Linux при запуске процесса и назначается ему PID? Где я могу найти этот журнал? Удалите все, что не является числом из 4 символов. Почему я не могу получить значения выхода команды в этом сценарии bash? Как вызвать скрипт с шаблоном подстановки и еще два аргумента? awk расширенное сопоставление шаблонов (сопоставление шаблонов внедрения в действиях для уже сопоставленных строк) Как создать пакет deb, содержащий несколько проектов? Как интегрировать скрипты демона с sensu? mpg321 играет слишком быстро, на высокой высоте, через USB Audio Не удается редактировать файл sudoers – невозможно выполнить sudo Печать PDF в PDF ухудшает качество? Установите Passenger на Scientific Linux 6.5 через RPM Как узнать, какие файловые системы поддерживает мой Linux? Как разрешить любому пользователю (mysql, apache и т. Д.) Использовать любой TCP или UDP-порт? Настройка примечаний в режиме emacs org Изменить идентификатор пользователя и идентификатор группы файлов в архиве?

Emacs: интерфейс, который смешивает команды и аргументы

Я испытываю трудности с настройкой Emacs, чтобы я мог вводить меньше, но добиваясь того же самого, используя тот факт, что при программировании вы повторяете (вводите) более или менее одно и то же снова и снова. Мне нужно это по медицинским соображениям, но также потому, что это имеет смысл в целом.

Интерфейс Emacs, который я подразумеваю, в основном смешивает команды с аргументами. Я просто покажу пример, и вы сразу поймете.

Хорошо, вам не обязательно быть настолько резким, чтобы видеть, что в C цикл for, «меньше чем что-то, увеличивается на единицу», очень распространен. Поэтому я решил написать что-то вроде этого:

(defun C-for-loop-new-int-less-inc (var start stop) "Shortcut for putting a C for loop at point. Note: There are some specifics to i." (interactive "sVariable: \nnStarts at: \nnLess than: ") (insert (format "for (int %s = %d; %s < %d; %s++) {\n\n}" var start var stop var) ) (previous-line) (c-indent-line-or-region) ) 

И чтобы уменьшить типизацию:

 (defalias 'fnili 'C-for-loop-new-int-less-inc) 

Теперь, Mx fnili RET i RET 0 RET 10 RET должен получить вас

 for (int i = 0; i < 10; i++) { } 

с курсором во второй строке с отступом.

Хотя это улучшение, как я могу запустить команду следующим образом:

 fnii0l10i 

Таким образом, все циклы RET -wait-reorient исчезнут, вместо этого вы будете писать всю команду один раз, и это будет видно все время.

Теперь я могу написать функцию, которая берет строку, а затем анализирует ее, но я не буду этого делать, если Emacs уже поддерживает такой интерфейс, который я ищу.

редактировать

Итак, «шаблонное средство» – это обозначение?

Я не думаю, что это трудно сделать. Если вы хотите это для всего языка C, и для всех возможных поворотов, я согласен. Но для определения всего нескольких трудоемких случаев (для случая с коммутатором, защиты в файлах заголовков) и их реализации, это будет полезной функцией.

Конечно, если работа была выполнена, я не делаю это с нуля (как я сказал :), поэтому я обязательно проверю ваши ссылки.

Но … Я думаю, что мой пример был слишком сложным, поэтому он омрачал актуальный вопрос, касающийся интерфейса: вместо того, чтобы ударять RET и получать пустую строку для каждого аргумента, все это помещает в одну командную строку.

Более простой пример: вместо Mx man RET irssi RET , как я могу сделать Mx man"irssi" RET ? В этом примере это не очень полезно (возможно, немного), потому что это всего лишь один аргумент, и нет ничего сложного в этом (что вам нужно держать в своем мозгу), и вы редко ошибетесь, что у вас есть «backtrack», чтобы исправить. Но в команде примера цикла for в исходном сообщении (фиктивный, поскольку я его никогда не видел, если он существует), в этом случае вы действительно выиграете от него.

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

В Emacs Wiki перечислены несколько пакетов. Основными кандидатами являются:

  • Yasnippet
  • Скелетный режим
  • Фрагменты темпа
  • Обычный режим
  • MsfAbbrev (не поддерживается)