Intereting Posts
nmap -sn перечисляет все активные хосты в моей сети, но nmap -sL не делает работа с именами файлов в другой кодировке по ssh Linux, resolv.conf – добавление серверов MSDNS и Bind DNS, где MSDNS не является рекурсивным? Не удается создать другой раздел? Ошибка при подсчете символов в файле Как я могу установить пакет bash в OpenWrt без доступа к Интернету? прилипание к окнам Можно ли изменить оболочку, используемую для запуска приложений GUI из диспетчера рабочего стола? Значение «e» и «ee» в столбце «Id» `fdisk -l`? Как удалить ярлык Alt + правый клик из LXDE, чтобы он был доступен для приложений? Запуск приложения без GUI после подключения к сети PHP работает от root на Apache2, работающем как демон Пакетное перемещение всех файлов из подкаталогов в родительский каталог, но файлы имеют одинаковое имя Ограничить пользователя от просмотра файлов, которыми он не владеет. Игнорировать файлы для завершения zsh для SVN

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 (не поддерживается)