想要在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上找到
知识共享署名-非商业性使用-相同方式共享4.0国际许可协议