Emacs自动添加文件头
想要在emacs中添加文件头有好几种方法:
-
直接手打
-
使用模板yasnippet
-
使用header2
-
使用内置的package auto-insert
header2可能是最方便的一种自动添加文件头的方式,但我之前使用过,想要自定义自己想要的内容很难,而且白白浪费header2的功能
今天主要说一说emacs内置里auto-insert,使用它在创建文件时自动添加文件头信息
基础使用
直接(auto-insert-mode)
并且设置
1(setq auto-insert-query nil) ;; 不提醒
自定义文件头
1(setq auto-insert-alist 2 '(((python-mode . "Python program") nil 3 "#!/usr/bin/env python\n" 4 "# -*- coding: utf-8 -*-\n" 5 "# **************************************************************************\n" 6 "# Copyright © " (substring (current-time-string) -4) " " (user-full-name) "\n" 7 "# File Name: " (file-name-nondirectory buffer-file-name) "\n" 8 "# Author: " (user-full-name)"\n" 9 "# Email: " user-mail-address "\n" 10 "# Created: " (format-time-string "%Y-%m-%d %T (%Z)" (current-time)) "\n" 11 "# Last Update: " (format-time-string "%Y-%m-%d %T (%Z)" (current-time)) "\n" 12 "# By: \n" 13 "# Description: \n" 14 "# **************************************************************************\n") 15 ((c-mode . "C program") nil 16 "/**************************************************************************\n" 17 " Copyright © " (substring (current-time-string) -4) " " (user-full-name) "\n" 18 " File Name: " (file-name-nondirectory buffer-file-name) "\n" 19 " Author: " (user-full-name)"\n" 20 " Email: " user-mail-address "\n" 21 " Created: " (format-time-string "%Y-%m-%d %T (%Z)" (current-time)) "\n" 22 " Last Update: \n" 23 " By: \n" 24 " Description: \n" 25 " **************************************************************************/\n" 26 "#include<stdio.h>\n" 27 "#include<string.h>\n") 28 ((sh-mode . "Shell script") nil 29 "#!/bin/bash\n" 30 "# **************************************************************************\n" 31 "# Copyright © " (substring (current-time-string) -4) " " (user-full-name) "\n" 32 "# File Name: " (file-name-nondirectory buffer-file-name) "\n" 33 "# Author: " (user-full-name)"\n" 34 "# Email: " user-mail-address "\n" 35 "# Created: " (format-time-string "%Y-%m-%d %T (%Z)" (current-time)) "\n" 36 "# Last Update: \n" 37 "# By: \n" 38 "# Description: \n" 39 "# **************************************************************************/\n")))
提取文件头公共信息
之前的模板有很多重复的内容,写一个函数把公共的信息提取出来
-
基础信息
1(defun maple//insert-string() 2 (concat 3 (make-string 80 ?*) 4 "\n" 5 "Copyright © " (substring (current-time-string) -4) " " (user-full-name) "\n" 6 "File Name: " (file-name-nondirectory buffer-file-name) "\n" 7 "Author: " (user-full-name)"\n" 8 "Email: " user-mail-address "\n" 9 "Created: " (format-time-string "%Y-%m-%d %T (%Z)" (current-time)) "\n" 10 "Last Update: \n" 11 " By: \n" 12 "Description: \n" 13 (make-string 80 ?*)))
-
插入注释信息 <2018-03-16 五>更新:
1(defun maple/insert-string(&optional prefix) 2 (replace-regexp-in-string 3 "^" (or prefix comment-start) 4 (maple//insert-string)))
原代码:
1(defun maple/insert-string(&optional prefix) 2 (or prefix (setq prefix comment-start)) 3 (mapconcat 4 (lambda (x) (concat prefix x)) 5 (split-string (maple//insert-string) "\n") "\n"))
-
更改模板
1(setq auto-insert-alist 2 '(((ruby-mode . "Ruby program") nil 3 "#!/usr/bin/env ruby\n" 4 "# -*- encoding: utf-8 -*-\n" 5 (maple/insert-string) "\n") 6 ((python-mode . "Python program") nil 7 "#!/usr/bin/env python\n" 8 "# -*- coding: utf-8 -*-\n" 9 (maple/insert-string) "\n") 10 ((c-mode . "C program") nil 11 "/*" 12 (string-trim-left (maple/insert-string " ")) "*/\n" 13 "#include<stdio.h>\n" 14 "#include<string.h>\n") 15 ((sh-mode . "Shell script") nil 16 "#!/bin/bash\n" 17 (maple/insert-string) "\n") 18 ((go-mode . "Go program") nil 19 "/*" 20 (string-trim-left (maple/insert-string " ")) "*/\n")))
相关的配置可以在我的github上找到
