emacs你让我头大一星期了,终于解决了,分享分享
安装步骤:
最近在学习windows下的Emacs,遇到不少问题
1、下载
到这个网址可以下载到Emacs的windows版本:http://ftp.gnu.org/pub/gnu/emacs/windows/
只需要一个压缩文档,如emacs-22.3-bin-i386.zip
2、安装
在D盘根目录下新建一个文件夹,取名Emacs22.2(也可以是其他路径,随个人喜好而定),将emacs-22.2-bin-i386.zip里的文件解压到这个目录下,这样在d:/Emacs22.2/下就有bin, tec, info, leim, lisp, site-lisp等目录。
双击bin文件夹里的addpm.exe进行安装,安装后将在开始菜单生成Gnu Emacs/Emacs链接,点击这个链接便可启动Emacs。也可以双击bin文件夹里的runemacs.exe启动。注意到bin目录里还有个文件是emacs.exe,双击它也可以启动,但是会出现一个控制台窗口
3、修改注册表
打开注册表,找到HKEY_LOCAL_MACHINE/SOFTWARE/GNU/Emacs(如果没有则手动添加项),在此项下添加字符串值,名称为HOME,值为D:/Emacs22.2。这样做的目的是让D:/Emacs22.2成为Emacs的home路径(传说中的home path,以后你将会经常看到“home目录”、“home directory”等等)。
4、创建.emacs.d目录和.emacs文件
相信.emacs.d目录和.emacs文件是困扰大家很久的问题了,其实有个简单的办法可以解决此问题。启动emacs,用鼠标点击Options菜单,随便点击一两个选项,比如点击一下Active Region Highlighting,然后点击Save Options。先不要担心你会破坏了什么东西,这样做的目的是让emacs自动创建.emacs.d目录以及.emacs文件!观察你的Emacs窗口最后一行,是否显示“Wrote d:/Emacs22.2/.emacs”?如果是的话就对了,当你选择Save Options的时候,Emacs会在home路径下产生.emacs文件,并把配置信息写进这个文件。现在看看你的d:/Emacs22.2/目录下是否产生了这两个东西?
5、加载.el文件
lisp目录下存放着lisp源文件(*.el)和已编译的lisp文件(*.elc),以后你也可以将自己的.el文件放在这个目录下,然后还要在.emacs文件插入相关语句。比如你有一个文件叫做abcd.el,将它复制到lisp目录下,然后打开.emacs文件插入一句(require 'abcd)就可以了(包括圆括号,不需要扩展名.el)。
如果你不喜欢lisp文件夹,也可以自己新建一个,比如在home目录下建一个文件夹叫做xyz,然后把abcd.el放在xyz目录下,在.emacs文件插入以下两句:
(setq load-path (cons "~/xyz" load-path))
(require 'abcd)
第一句告诉emacs先加载你的xyz目录,第二句再加载abcd.el。注意“~/”是linux系统的用法,表示home目录。
如果你和我一样在学习《Sams Teach Yourself Emacs in 24 Hours》这本书的话,我想你一定需要sams-lib.el这个文件!可以到这个网址下载:
http://www.cs.virginia.edu/~wh5a/personal/Emacs/
找到sams-lib.el之后右键点击“目标另存为”就可以了!
配置文件:
;;;;---------------------- 目录设置 ------------------------
;;改变默认路径
(setenv "HOME" "D:/emacs")
(setenv "PATH" "D:/emacs")
;;set the default file path
setq default-directory "D:/C/"
;;(add-to-list 'load-path "~/site-lisp")
;;--------------------- 文档自动识别 -----------------------
;;(require ' unicad)
;;字体设置
;;(set-frame-font "consolas 12")
;设置字体
(set-default-font "consolas-10")
(set-fontset-font (frame-parameter nil 'font)
'han '("Microsoft YaHei" . "unicode-bmp"))
;安装linum.el
(require 'linum)
(global-linum-mode 1)
;; M-x custom-face 输入:linum
;; 设置 load path
;;(setq load-path (cons "~/.emacs.d/elisp" load-path))
;;(setq load-path (cons "~/site-lisp" load-path))
;; 在标题栏显示buffer的名字
(setq frame-title-format "emacs@%b")
;; 设置有用个人信息
(setq user-full-name "Jerry")
(setq user-mail-address "ywj_1225@126.com")
;; 配色方案
(when (and window-system (require 'color-theme))
;;(color-theme-retro-green)
;;(color-theme-robin-hood)
;;(color-theme-kingsajz)
(color-theme-dark-blue2))
;;光标显示为一竖线/方块
(setq-default cursor-type 'bar)
;;;;(setq-default cursor-type 'box)
;; 关闭提示音
(setq visible-bell t)
;; 简化工具条
(tool-bar-mode -1)
;; 显示时间
(display-time)
;; 显示行号
(setq column-number-mode t)
;; 显示匹配的括号
(show-paren-mode t)
;; 加大kill ring,防止出错后无法回滚文档
(setq kill-ring-max 100)
;; 把fill-column设为60
(setq default-fill-column 60)
;; 不使用tab缩进
(setq-default indent-tabs-mode nil)
(setq default-tab-width 4)
(setq tab-width 4)
;; 设置缩进字符数
(setq c-basic-offset 8)
;; 询问时的 yes or no 改为 y/n,减少输入量
(fset 'yes-or-no-p 'y-or-n-p)
;; 设置sentence-end可以识别中文标点
(setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil)
;; 可以递归使用minibuffer
(setq enable-recursive-minibuffers t)
;; 防止页面滚动时跳动,scroll-margin 3
(setq scroll-margin 3
scroll-conservatively 10000)
;; 把默认的major mode设置为 text-mode
(setq default-major-mode 'text-mode)
;; 括号匹配时显示另外一边的括号,而不是跳到另一个括号
(show-paren-mode t)
(setq show-paren-style 'parentheses)
;; 光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线
(mouse-avoidance-mode 'animate)
;; 让emacs可以直接打开和显示图片
(auto-image-file-mode)
;; 语法加亮
(global-font-lock-mode t)
;; 高亮显示要拷贝的区域
(transient-mark-mode t)
;; 把一些默认禁用的功能打开
(put 'set-goal-column 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)
(put 'LaTeX-hide-environment 'disabled nil)
;; 设置备份时的版本控制
(setq version-control t)
(setq kept-new-versions 3)
(setq delete-old-versions t)
(setq kept-old-versions 2)
(setq dired-kept-versions 1)
;; 如果不想自动备份文件,可以把上面的配置注释
;; 打开下面的配置:
;;
;; 不自动生成备份文件
;; (setq-default make-backup-files nil)
;; 让 dired 可以递归地拷贝和删除目录
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)
;;把speedbar关联到了F4上:
(global-set-key [f4] 'speedbar)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;自定义按键
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(global-set-key [f2] 'shell);F1进入Shell
;;(setq compile-command "make -f Makefile")
(global-set-key [f7] 'quick-compile);F7编译文件
(global-set-key [f11] 'split-window-vertically);F11分割窗口
;;(global-set-key [f12] 'delete-other-windows);F12 关闭其它窗口
;;编译函数------------------------
;;编译
(defun quick-compile ()
"A quick compile funciton for C++"
(interactive)
(save-some-buffers t)
(compile (concat "g++ " (buffer-name (current-buffer)) " -g"))
)
;;;;; ------------------------------------------------;;;;;;;;;;;
;;;;; --------------Cedet---------------------------;;;;;;;;;;;
(load-file "~/site-lisp/cedet/common/cedet.el")
(require 'cedet)
;;;;; --------------头文件------------------------------;;;;;;;;;;;
(defconst cedet-user-include-dirs
(list ".." "../include" "../inc" "../common" "../public"
"../.." "../../include" "../../inc" "../../common" "../../public"))
(defconst cedet-win32-include-dirs
(list
"D:/Dev-Cpp/MinGW32/include"
)
)
(require ' semantic-c nil ' noerror)
(let ((include-dirs cedet-user-include-dirs))
(when (eq system-type 'windows-nt)
(setq include-dirs (append include-dirs cedet-win32-include-dirs)))
(mapc (lambda (dir)
(semantic-add-system-include dir 'c++-mode)
(semantic-add-system-include dir 'c-mode))
include-dirs))
;;-------------- 代码自动补全auto-complete ----------------
;;配置auto-complete
(add-to-list 'load-path "~/site-lisp/auto-complete-1.3/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/site-lisp/auto-complete-1.3/dict")
(ac-config-default)
;;配置YASnippet
(add-to-list 'load-path
"~/site-lisp/yasnippet-0.6.1c")
(require 'yasnippet) ;; not yasnippet-bundle
(yas/initialize)
(yas/load-directory "~/site-lisp/yasnippet-0.6.1c/snippets")
;;-----------------------------------------------------------
;;;;; ------------------------------------------------;;;;;;;;;;;
;;;;; --------------------编译设置-------------------;;;;;;;;;;;
;;;;; ------------------------------------------------;;;;;;;;;;;
;;;;; --------------------Gdb-------------------;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;GDB设置;;;;;;;;;;;;;;;;;;;;;;
(global-set-key [f5] 'make-frame-command);;另外开启一个窗口进行gdb调试
(setq gdb-many-windows t)
(require 'gud)
(global-set-key [f6] 'gdb)
;;F6设置为在Emacs中调用gdb
;;;;;;;;;;;;;;;;;;;;;END GDB设置;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;shell设置;;;;;;;;;;;;;;;;;;
(global-set-key [f1] 'shell);F1进入Shell
(defun open-eshell-other-buffer ()
"Open eshell in other buffer"
(interactive)
(split-window-vertically)
(eshell))
(global-set-key [C-f8] 'open-eshell-other-buffer)
(global-set-key [(f8)] 'eshell)
;;目的是开一个shell的小buffer,用于更方便地测试程序(也就是运行程序了),我经常会用到
;;f8就是另开一个buffer然后打开shell,C-f8则是在当前的buffer打开shell
;;;;;;;;;;;;;;;;;;shell设置;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;自动添加括号;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;--------------------------doxymacs
;##doxymacs;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-to-list 'load-path "~/site-lisp/doxymacs-1.8.0/no-autoconf");读取安装el的路径
(require 'doxymacs) ;; 启动doxymacs
;;注释高亮,针对C和C++程序
(defun my-doxymacs-font-lock-hook ()
(if (or (eq major-mode 'c-mode) (eq major-mode 'c++-mode))
(doxymacs-font-lock)))
(add-hook 'font-lock-mode-hook 'my-doxymacs-font-lock-hook)
(doxymacs-mode);doxymacs-mode常true
(global-set-key [(f10)] 'doxymacs-mode);doxymacs-mode快捷键[F10]
(add-hook 'c-mode-common-hook 'doxymacs-mode) ;; 启动doxymacs-mode
(add-hook 'c++-mode-common-hook 'doxymacs-mode) ;; 启动doxymacs-mode
;;---C-c d i
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defconst doxymacs-C++-file-comment-template
'(
"////////////////////////////////////////////////////////////////////////////" > n
"/// " > n
"/// " (doxymacs-doxygen-command-char) "file "
(if (buffer-file-name)
(file-name-nondirectory (buffer-file-name))
"") > n
"/// " > n
"/// " (doxymacs-doxygen-command-char) "author " (user-full-name) > n
"/// " > n
"/// " (doxymacs-doxygen-command-char) "date " (current-time-string) > n
"/// " > n
"/// " (doxymacs-doxygen-command-char) "brief " > n
"/// " > n
"/// " " "> n
"/// " " "> n
"/// " > n
"/// " (doxymacs-doxygen-command-char) "version"> n
"/// " > n
"/// " > n
"/// " " Copyright (c) 2012, 上海理工大学-武江华"> n
"/// " > n
"////////////////////////////////////////////////////////////////////////////"> n)
"Default C++-style template for file documentation.")
;;;;;;;;;;;;;;;;;;;;;;;;;;自定义设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
;; '(column-number-mode t)
;; '(display-time-mode t)
;; '(ecb-options-version "2.40")
;; '(ecb-primary-secondary-mouse-buttons (quote mouse-1--mouse-2))
;; '(ecb-source-path (quote ("D:/C/")))
;; '(scroll-bar-mode (quote right))
;; '(show-paren-mode t))
;;;;;;;;;;;;;;;;;;;;;;;;;;自定义设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;