Запуск любого буфера Emacs с расширением .c с шаблоном - PullRequest
15 голосов
/ 11 января 2009

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

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

int main(void){

}

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

Ответы [ 9 ]

18 голосов
/ 11 января 2009

Положите что-то вроде этого в .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)

Подробнее:

10 голосов
/ 11 января 2009

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

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

4 голосов
/ 12 мая 2009

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

4 голосов
/ 11 января 2009

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

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

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

1 голос
/ 06 ноября 2012

Этот вопрос старый, но это может кому-то помочь. Глядя на этот сайт , я скопировал и вставил эту часть в мой файл .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")

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

0 голосов
/ 26 июля 2017

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

0 голосов
/ 25 июня 2009

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

0 голосов
/ 12 января 2009

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

(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")
0 голосов
/ 12 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...