Запуск любого Emacs-буфера с расширением .c с шаблоном

Я пишу много коротких программ с отбросами, и одна из вещей, которые я нахожу, повторяю, это набирать код, например

#include <stdio.h>
#include <stdlib.h>

int main(void){

}

Чтобы сохранить некоторые сухожильные хиты, мне было интересно, можно ли вставить простой шаблон выше всякий раз, когда я создаю буфер с расширением .c.

Ответы

Ответ 1

Поместите что-нибудь подобное в .emacs

(define-skeleton c-throwaway
  "Throwaway C skeleton"
  nil
  "#include <stdio.h>\n"
  "#include <stdlib.h>\n"
  "\n"
  "int main(void){\n"
  "\n"
  "}\n")

И eval (C-x C-e). Это даст вам (c-throwaway), который вставляет ваш шаблон.

Чтобы автоматически вставить эту вставку, вам необходимо активировать auto-insert-mode. Как только вы сделаете это, вы можете describe-variable auto-mode-alist и прочитать, как emacs делает некоторые из его открытых файловая магия. Затем определите auto-insert-alist, чтобы применить его, когда вы найти новый файл.

Может быть, что-то вроде этого

(define-auto-insert "\\.\\([Cc]\\|cc\\|cpp\\)\\'" 'c-throwaway)

Подробнее:

Ответ 2

Я использую template.el из http://emacs-template.sourceforge.net/

В принципе, я создаю файл с именем ~/.templates/TEMPLATE.c, а затем он вставлен в мои .c файлы. Вы также можете использовать специальные разметки и произвольные выражения lisp, если вы просто не хотите выгружать текст в буфер. Я использую эту функцию, чтобы модули Perl начинались с "package Foo:: Bar", когда они называются lib/Foo/Bar.pm. Очень удобно.

Ответ 3

Следующая функция будет запрашивать имя файла, а затем вставить файл и перейти в c-mode. Единственная проблема заключается в том, что вы должны вызвать эту функцию, чтобы создать буфер вместо обычного.

(defun defaultCtemplate(cfilename)
    (interactive "sFilename: ")
    (switch-to-buffer (generate-new-buffer cfilename))
    (insert-file-contents "~/Desktop/test.c")
    (c-mode)
)

P.S Спасибо за вопрос, теперь я знаю, как сделать это для себя:)

Ответ 4

Вы также можете использовать систему шаблонов YASnippet для Emacs, у которой есть встроенный шаблон с именем main. Поэтому при написании кода просто введите main, нажмите TAB, и он расширит его до требуемой формы. (И вы всегда можете написать свои собственные шаблоны фрагментов.)

Ответ 5

Этот вопрос старый, но это может помочь кому-то. Глядя на этот сайт, я скопировал и вставил эту часть в файл .emacs:

;; automatic insertion of templates
(require 'autoinsert)
(auto-insert-mode)  ;;; Adds hook to find-files-hook
(setq auto-insert-directory "~/Documents/Emacs/templates/") ;;; *NOTE* Trailing slash important
;;(setq auto-insert-query nil) ;;; If you don't want to be prompted before insertion
(define-auto-insert "\.tex" "my-latex-template.tex")
(define-auto-insert "\.cpp" "my-cpp-template.cpp")
(define-auto-insert "\.h" "my-cpp-template.h")

После изменения каталога и имен файлов он отлично работает.

Ответ 6

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

Ответ 7

Вот как я это делаю (потому что я не знал о режиме автоматической вставки: -)

(require 'tempo)

(setq c-new-buffer-template 
      '(
        "#include <stdio.h>\n"
        "#include <stdlib.h>\n"
        "\n"
        "int main(void){\n"
        "\n"
        "}\n"
        ))

(defun my-c-style ()
  "My editing style for .c files."
  (c-mode)
  (if (zerop (buffer-size))
      (tempo-template-c-skeleton)))

(setq auto-mode-alist
      (cons '("\\.c\\'" . my-c-style) auto-mode-alist))

(tempo-define-template "c-skeleton" c-new-buffer-template
               nil
               "Insert a skeleton for a .c document")

Ответ 8

Я использую комбинацию Defaultcontent.el и YASnippet. эль. Первый заполняет совершенно новые файлы с содержимым по умолчанию. Последнее представляет собой своего рода легкую макрокоманду с кодовым генератором. Введите "для" и нажмите "TAB", и вставлен скелет цикла for. И т.д. Вы можете легко определить свои собственные фрагменты. "swi TAB" получает полную инструкцию оператора. И так далее.

Ответ 9

yasnippet хорошо подходит для расширения шаблона в вашем файле и очень легко создавать ваши фрагменты. auto-insert хорош для заполнения нового файла шаблоном, но писать свой собственный шаблон сложно. Существует отличный пакет yatemplate, который соединяет промежуток между YASnippet и auto-insert-mode, я могу писать правила автоматической вставки с помощью YASnippet.