输入 inc 然后会提示输入文件名称.
;; 安装 abbrev (mapc (lambda (mode) (define-abbrev-table mode '( ("inc" "" skeleton-include 1) ))) '(c-mode-abbrev-table c++-mode-abbrev-table)) ;; 输入 inc , 可以自动提示输入文件名称,可以自动补全. (define-skeleton skeleton-include "generate include<>" "" > "#include <" (completing-read "Include File:" (mapcar #'(lambda (f) (list f )) (apply 'append (mapcar #'(lambda (dir) (directory-files dir)) (list "/usr/include" "/usr/local/include" "/usr/include/g++-3"))))) ">")
下面的这段代码的也许更加有用,当你发呆的时间超过 4 秒以上, 头文件的文件名称自动加一个下划线,在上面按回车,可以打开这个文件。
(defvar wcy-c/c++-hightligh-included-files-key-map nil) (if wcy-c/c++-hightligh-included-files-key-map nil (setq wcy-c/c++-hightligh-included-files-key-map (make-sparse-keymap)) (define-key wcy-c/c++-hightligh-included-files-key-map (kbd "<RET>") 'find-file-at-point)) (defun wcy-c/c++-hightligh-included-files () (interactive) (when (or (eq major-mode 'c-mode) (eq major-mode 'c++-mode)) (save-excursion (goto-char (point-min)) ;; remove all overlay first (mapc (lambda (ov) (if (overlay-get ov 'wcy-c/c++-hightligh-included-files) (delete-overlay ov))) (overlays-in (point-min) (point-max))) (while (re-search-forward "^#include[ \t]+[\"<]\\(.*\\)[\">]" nil t nil) (let* ((begin (match-beginning 1)) (end (match-end 1)) (ov (make-overlay begin end))) (overlay-put ov 'wcy-c/c++-hightligh-included-files t) (overlay-put ov 'keymap wcy-c/c++-hightligh-included-files-key-map) (overlay-put ov 'face 'underline)))))) ;; 这不是一个好办法,也可以把它加载到 c-mode-hook or c++-mode-hook 中。 (setq wcy-c/c++-hightligh-included-files-timer (run-with-idle-timer 4 t 'wcy-c/c++-hightligh-included-files))