windows下安裝emacs及添加配置文件(網絡整合收集)

 windows下安裝emacs及添加配置文件(網絡整合收集)

前言
在這個蔚藍色的星球上,流傳着兩大神器的傳說:據說Emacs是神的編輯器,而Vim是編輯器之神。
一些人勇敢地拾起了Vim或Emacs,卻發現學習曲線陡峭而漫長,還是有一些人留下來了,堅定地守護着這兩大神器。
一些說葡萄太酸的人想離開又不甘心,總是問:它們到底神在哪裏啊?
Emacs和Vim介紹來自:http://os.51cto.com/art/201101/242518.htm

首先我們需要下載windows版的emacs,官網下載地址:
http://ftp.gnu.org/pub/gnu/emacs/windows/
比如我下載的是:emacs-23.3-bin-i386.zip
在硬盤裏解壓後有個addpm.exe,雙擊運行它。

在Windows下是無法手動建立.emacs文件的,你可以打開emacs然後在Options下隨便
挑個選項比如:Paren Match Highlighting然後點Save Options
你就可以看到下面的提示
Wrote c:/Documents and Settings/Administrator/Application Data/.emacs
這時已經生成.emacs文件了。
爲了以後可以反覆使用配置和插件,我們需要改變插件導入路徑,在C:\Documents 
and Settings\Administrator\Application Data\.emacs添加下面代碼

'(load-file "D:\emacs-23.3\.emacs");;要在第一行且單獨一行
然後在D:\emacs-23.3文件下建立配置文件.emacs,寫入下面的代碼。

;;改變默認路徑
(setenv "HOME" "D:/emacs-23.3")
(setenv "PATH" "D:/emacs-23.3")
;;set the default file path
(setq default-directory "~/")

最後在D:/emacs-23.3下建立文件夾ConFile,把插件(默認插件在lisp文件夾裏)都扔進去,
比如說display-line-number.el
在.emacs中寫入下面的代碼。

;;顯示行號
(load-file "~/ConFile/display-line-number.el")
(require 'display-line-number)
(global-display-line-number-mode t)

Emacs23可以不用插件顯示行號
在配置.emacs文件中加上
(global-linum-mode t)
或者m-x  global-linum-mode回車(m-x就是Alt+x)
就可以顯示行號,而且在用了tabbar插件的情況下,這種方式不會出現差一行的錯誤.

(setq case-fold-search nil);;查找的時候就強制匹配大小寫t,nil
(setq case-replace  nil);;強制大小寫自動替換



下面是我從網上找的 Emacs基本配置稍加整理,
我的.emacs文件祥細代碼(網絡收藏整理的):

;;'(load-file "D:\emacs-23.3\.emacs");;放在C:\~~~\.emacs文件裏第一行且單獨一行
;;'(global-linum-mode t)
;;改變默認路徑
(setenv "HOME" "D:/emacs-23.3")
(setenv "PATH" "D:/emacs-23.3")

;============================ 語言環境字符集設置 =================================
;;這一部份主要用在linux 環境下,windows下沒什麼作用
;; (set-language-environment 'Chinese-GB)
;; (set-keyboard-coding-system 'utf-8)
;; (set-clipboard-coding-system 'utf-8)
;; (set-terminal-coding-system 'utf-8)
;; (set-buffer-file-coding-system 'utf-8)
;; (set-default-coding-systems 'utf-8)
;; (set-selection-coding-system 'utf-8)
;; (modify-coding-system-alist 'process "*" 'utf-8)
;; (setq default-process-coding-system '(utf-8 . utf-8))
;; (setq-default pathname-coding-system 'utf-8)
;; (set-file-name-coding-system 'utf-8)
;; (setq ansi-color-for-comint-mode t) ;;處理shell-mode亂碼,好像沒作用
;=========================== 語言環境字符集設置結束 ===============================

;============================ MS Windows環境下字體設置 ===========================
(setq default-frame-alist
(append
'((font . "fontset-chinese")) default-frame-alist))


(create-fontset-from-fontset-spec
"-outline-Courier New-normal-r-normal-normal-13-97-96-96-c-*-fontset-chinese")
(set-fontset-font
"fontset-default" nil
"-outline-新宋體-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-chinese" 'kana
"-outline-新宋體-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-chinese" 'han
"-outline-新宋體-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-chinese" 'cjk-misc
"-outline-新宋體-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-chinese" 'symbol
"-outline-新宋體-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-default-font "fontset-chinese")

;===========================MS Windows環境下字體設置結束 =========================

;============================ Linux環境下字體設置 =================================

;; (create-fontset-from-fontset-spec
;; "-*-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier")
;; (set-default-font "fontset-courier")
;; (setq default-frame-alist
;; (append
;; '((font . "fontset-courier")) default-frame-alist))

;; (set-fontset-font
;; "fontset-default" nil
;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gb2312.1980-*" nil 'prepend)
;; (set-fontset-font
;; "fontset-courier" 'kana
;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)
;; (set-fontset-font
;; "fontset-courier" 'han
;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)
;; (set-fontset-font
;; "fontset-courier" 'cjk-misc
;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)

;============================ Linux環境下字體設置結束 ==============================


;;;;;;;;;;;;;;;;;;;;語言環境字體設置結束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;解決中英文混排不能正確fill的問題,好像沒什麼用
;; (put-charset-property 'chinese-cns11643-5 'nospace-between-words t)
;; (put-charset-property 'chinese-cns11643-6 'nospace-between-words t)
;; (put-charset-property 'chinese-cns11643-7 'nospace-between-words t)


;;;;;;;;;;;;;;;;;;;;;;;;;;; 設置窗口界面 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(set-foreground-color "grey")
(set-background-color "black")
(set-cursor-color "gold1")
(set-mouse-color "gold1")

(set-scroll-bar-mode nil)
;;取消滾動欄

;;(customize-set-variable 'scroll-bar-mode 'right))
;;設置滾動欄在窗口右側,而默認是在左側

(tool-bar-mode nil)
;;取消工具欄

(setq default-frame-alist
'((vertical-scroll-bars)
(top . 25)
(left . 45)
(width . 110)
(height . 40)
(background-color . "black")
(foreground-color . "grey")
(cursor-color . "gold1")
(mouse-color . "gold1")
(tool-bar-lines . 0)
(menu-bar-lines . 1)
(right-fringe)
(left-fringe)))


;; 設置另外一些顏色:語法高亮顯示的背景和主題,區域選擇的背景和主題,二次選擇的背景和選擇
(set-face-foreground 'highlight "white")
(set-face-background 'highlight "blue")
(set-face-foreground 'region "cyan")
(set-face-background 'region "blue")
(set-face-foreground 'secondary-selection "skyblue")
(set-face-background 'secondary-selection "darkblue")

;;;;;;;;;;;;;;;;;;;;;;;;;;;; 設置界面結束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;; 顯示時間設置 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(display-time-mode 1);;啓用時間顯示設置,在minibuffer上面的那個槓上
(setq display-time-24hr-format t);;時間使用24小時制
(setq display-time-day-and-date t);;時間顯示包括日期和具體時間
(setq display-time-use-mail-icon t);;時間欄旁邊啓用郵件設置
(setq display-time-interval 10);;時間的變化頻率,單位多少來着?

;;;;;;;;;;;;;;;;;;;;;;;;;;; 顯示時間設置結束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定製操作習慣;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;設置打開文件的缺省路徑
(setq default-directory "/")

;;ido的配置,這個可以使你在用C-x C-f打開文件的時候在後面有提示;
;;這裏是直接打開了ido的支持,在emacs23中這個是自帶的.
(ido-mode t)

(setq visible-bell t)
;;關閉煩人的出錯時的提示聲
(setq inhibit-startup-message t)
;;關閉emacs啓動時的畫面

(setq gnus-inhibit-startup-message t)
;;關閉gnus啓動時的畫面

(fset 'yes-or-no-p 'y-or-n-p)
;; 改變 Emacs 固執的要你回答 yes 的行爲。按 y 或空格鍵表示 yes,n 表示 no。

(setq font-lock-maximum-decoration t)
(setq font-lock-global-modes '(not shell-mode text-mode))
(setq font-lock-verbose t)
(setq font-lock-maximum-size '((t . 1048576) (vm-mode . 5250000)))
;; 語法高亮。除 shell-mode 和 text-mode 之外的模式中使用語法高亮。

(setq global-linum-mode t);行號
(setq column-number-mode t)
(setq line-number-mode t)
;;顯示行列號

(setq mouse-yank-at-point t)
;;不要在鼠標點擊的那個地方插入剪貼板內容。我不喜歡那樣,經常把我的文檔搞的一團糟。我覺得先用光標定位,然後鼠標中鍵點擊要好的多。
;;不管你的光標在文檔的那個位置,或是在 minibuffer,鼠標中鍵一點擊,X selection 的內容就被插入到那個位置。

(setq kill-ring-max 200)
;;設置粘貼緩衝條目數量.用一個很大的kill ring(最多的記錄個數). 這樣防止我不小心刪掉重要的東西

(setq-default auto-fill-function 'do-auto-fill)
; Autofill in all modes;;
(setq default-fill-column 120)
;;把 fill-column 設爲 60. 這樣的文字更好讀

(setq-default indent-tabs-mode nil)
(setq default-tab-width 8)
(setq tab-stop-list ())
;;不用 TAB 字符來indent, 這會引起很多奇怪的錯誤。編輯 Makefile 的時候也不用擔心,因爲 makefile-mode 會把 TAB 鍵設置成真正的 TAB 字符,並且加亮顯示的。

(setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil)
;;設置 sentence-end 可以識別中文標點。不用在 fill 時在句號後插入兩個空格。

(setq enable-recursive-minibuffers t)
;;可以遞歸的使用 minibuffer

(setq scroll-margin 3 scroll-conservatively 10000)
;;防止頁面滾動時跳動, scroll-margin 3 可以在靠近屏幕邊沿3行時就開始滾動,可以很好的看到上下文。

(setq default-major-mode 'text-mode)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;;設置缺省主模式是text,,並進入auto-fill次模式.而不是基本模式fundamental-mode

(setq show-paren-mode t) ;;打開括號匹配顯示模式
(setq show-paren-style 'parenthesis)
;;括號匹配時可以高亮顯示另外一邊的括號,但光標不會煩人的跳到另一個括號處。

(setq mouse-avoidance-mode 'animate)
;;光標靠近鼠標指針時,讓鼠標指針自動讓開,別擋住視線。

(setq frame-title-format "emacs@%b")
;;在標題欄顯示buffer的名字,而不是 [email protected] 這樣沒用的提示。

(setq uniquify-buffer-name-style 'forward);;好像沒起作用
;; 當有兩個文件名相同的緩衝時,使用前綴的目錄名做 buffer 名字,不用原來的foobar 形式。

(setq auto-image-file-mode t)
;;讓 Emacs 可以直接打開和顯示圖片。

;(auto-compression-mode 1)
;打開壓縮文件時自動解壓縮。

(setq global-font-lock-mode t)
;;進行語法加亮。

(setq-default kill-whole-line t)
;; 在行首 C-k 時,同時刪除該行。

(add-hook 'comint-output-filter-functions
'comint-watch-for-password-prompt)
;;當你在shell、telnet、w3m等模式下時,必然碰到過要輸入密碼的情況,此時加密顯出你的密碼

;; (setq version-control t);;啓用版本控制,即可以備份多次
;; (setq kept-old-versions 2);;備份最原始的版本兩次,及第一次編輯前的文檔,和第二次編輯前的文檔
;; (setq kept-new-versions 1);;備份最新的版本1次,理解同上
;; (setq delete-old-versions t);;刪掉不屬於以上3中版本的版本
;; (setq backup-directory-alist '(("." . "~/backups")));;設置備份文件的路徑
;; (setq backup-by-copying t);;備份設置方法,直接拷貝
;; Emacs 中,改變文件時,默認都會產生備份文件(以 ~ 結尾的文件)。可以完全去掉
;; (並不可取),也可以制定備份的方式。這裏採用的是,把所有的文件備份都放在一
;; 個固定的地方("~/backups")。對於每個備份文件,保留最原始的兩個版本和最新的
;; 1個版本。並且備份的時候,備份文件是複本,而不是原件。

(setq make-backup-files nil)
;; 設定不產生備份文件
(setq version-control 'never);;不需要而不是想換個地方保存備份文件
(setq auto-save-mode nil)
;;自動保存模式

(setq-default make-backup-files nil)
;; 不生成臨時文件

(put 'scroll-left 'disabled nil) ;允許屏幕左移
(put 'scroll-right 'disabled nil) ;允許屏幕右移
(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)
;;把這些缺省禁用的功能打開。

;;允許emacs和外部其他程序的粘貼
(setq x-select-enable-clipboard t)

(setq mouse-yank-at-point t)
;;使用鼠標中鍵可以粘貼

(setq user-full-name "XXXXXX")
(setq user-mail-address "[email protected]")
;;設置有用的個人信息,這在很多地方有用。

(setq require-final-newline t)
;; 自動的在文件末增加一新行

(setq-default transient-mark-mode t)
;;Non-nil if Transient-Mark mode is enabled.

(setq track-eol t)
;; 當光標在行尾上下移動的時候,始終保持在行尾。

(setq Man-notify-method 'pushy)
;; 當瀏覽 man page 時,直接跳轉到 man buffer。

(setq next-line-add-newlines nil)
;;Emacs 21 中已經是缺省設置。按 C-n 或向下鍵時不添加新行。

(global-set-key [home] 'beginning-of-buffer)
(global-set-key [end] 'end-of-buffer)
;;設置home鍵指向buffer開頭,end鍵指向buffer結尾


(global-set-key (kbd "C-,") 'scroll-left)
;; "C-,"設爲屏幕左移命令
(global-set-key (kbd "C-.") 'scroll-right)
;; "C-."設爲屏幕右移命令

(global-set-key [f1] 'manual-entry)
(global-set-key [C-f1] 'info )

(global-set-key [f3] 'repeat-complex-command)

(global-set-key [f4] 'other-window)
;; 跳轉到 Emacs 的另一個buffer窗口

(defun du-onekey-compile ()
"Save buffers and start compile"
(interactive)
(save-some-buffers t)
(switch-to-buffer-other-window "*compilation*")
(compile compile-command))
(global-set-key [C-f5] 'compile)
(global-set-key [f5] 'du-onekey-compile)
;; C-f5, 設置編譯命令; f5, 保存所有文件然後編譯當前窗口文件

(global-set-key [f6] 'gdb)
;;F6設置爲在Emacs中調用gdb

(global-set-key [C-f7] 'previous-error)
(global-set-key [f7] 'next-error)

(defun open-eshell-other-buffer ()
"Open eshell in other buffer"
(interactive)
(split-window-vertically)
(eshell))
(global-set-key [(f8)] 'open-eshell-other-buffer)
(global-set-key [C-f8] 'eshell)
;;目的是開一個shell的小buffer,用於更方便地測試程序(也就是運行程序了),我經常會用到。
;;f8就是另開一個buffer然後打開shell,C-f8則是在當前的buffer打開shell

(setq speedbar-show-unknown-files t);;可以顯示所有目錄以及文件
(setq dframe-update-speed nil);;不自動刷新,手動 g 刷新
(setq speedbar-update-flag nil)
(setq speedbar-use-images nil);;不使用 image 的方式
(setq speedbar-verbosity-level 0)

(global-set-key [f9] 'speedbar)
;;設置f9調用speedbar命令
;;使用 n 和 p 可以上下移動,
;; + 展開目錄或文件進行瀏覽,- 收縮,RET 訪問目錄或文件,g 更新 speedbar。

(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)
;;讓 dired 可以遞歸的拷貝和刪除目錄。
(global-set-key [C-f9] 'dired)
;;設置[C-f9]爲調用dired命令

(global-set-key [f10] 'undo)
;;設置F10爲撤銷

(global-set-key [f11] 'calendar)
;;設置F11快捷鍵指定Emacs 的日曆系統

(global-set-key [f12] 'list-bookmarks)
;;設置F12 快速察看日程安排

(setq time-stamp-active t)
(setq time-stamp-warn-inactive t)
(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu")
;; 設置時間戳,標識出最後一次保存文件的時間。

(global-set-key (kbd "M-g") 'goto-line)
;;設置M-g爲goto-line

(global-set-key (kbd "C-SPC") 'nil)
;;取消control+space鍵設爲mark

(global-set-key (kbd "M-") 'set-mark-command)
;;這樣 我就不用按 C-@ 來 setmark 了, C-@ 很不好按。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定製操作習慣結束;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 設置日曆 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;設置日曆的一些顏色
(setq calendar-load-hook
'(lambda ()
(set-face-foreground 'diary-face "skyblue")
(set-face-background 'holiday-face "slate blue")
(set-face-foreground 'holiday-face "white")))

;;設置我所在地方的經緯度,calendar裏有個功能是日月食的預測,和你的經緯度相聯繫的。
;; 讓emacs能計算日出日落的時間,在 calendar 上用 S 即可看到
(setq calendar-latitude +39.54)
(setq calendar-longitude +116.28)
(setq calendar-location-name "北京")

;; 設置陰曆顯示,在 calendar 上用 pC 顯示陰曆
(setq chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
["子" "醜" "寅" "卯" "辰" "巳" "戊" "未" "申" "酉" "戌" "亥"])

;; 設置 calendar 的顯示
(setq calendar-remove-frame-by-deleting t)
(setq calendar-week-start-day 1) ; 設置星期一爲每週的第一天
(setq mark-diary-entries-in-calendar t) ; 標記calendar上有diary的日期
(setq mark-holidays-in-calendar nil) ; 爲了突出有diary的日期,calendar上不標記節日
(setq view-calendar-holidays-initially nil) ; 打開calendar的時候不顯示一堆節日

;; 去掉不關心的節日,設定自己在意的節日,在 calendar 上用 h 顯示節日
(setq christian-holidays nil)
(setq hebrew-holidays nil)
(setq islamic-holidays nil)
(setq solar-holidays nil)
(setq general-holidays '((holiday-fixed 1 1 "元旦")
(holiday-fixed 2 14 "情人節")
(holiday-fixed 3 14 "白色情人節")
(holiday-fixed 4 1 "愚人節")
(holiday-fixed 5 1 "勞動節")
(holiday-float 5 0 2 "母親節")
(holiday-fixed 6 1 "兒童節")
(holiday-float 6 0 3 "父親節")
(holiday-fixed 7 1 "建黨節")
(holiday-fixed 8 1 "建軍節")
(holiday-fixed 9 10 "教師節")
(holiday-fixed 10 1 "國慶節")
(holiday-fixed 12 25 "聖誕節")))

;;Calendar模式支持各種方式來更改當前日期
;;(這裏的“前”是指還沒有到來的那一天,“後”是指已經過去的日子)
;; q 退出calendar模式
;; C-f 讓當前日期向前一天
;; C-b 讓當前日期向後一天
;; C-n 讓當前日期向前一週
;; C-p 讓當前日期向後一週
;; M-} 讓當前日期向前一個月
;; M-{ 讓當前日期向後一個月
;; C-x ] 讓當前日期向前一年
;; C-x [ 讓當前日期向後一年
;; C-a 移動到當前周的第一天
;; C-e 移動到當前周的最後一天
;; M-a 移動到當前月的第一天
;; M-e 多動到當前月的最後一天
;; M-< 移動到當前年的第一天
;; M-> 移動到當前年的最後一天

;;Calendar模式支持移動多種移動到特珠日期的方式
;; g d 移動到一個特別的日期
;; o 使某個特殊的月分作爲中間的月分
;; . 移動到當天的日期
;; p d 顯示某一天在一年中的位置,也顯示本年度還有多少天。
;; C-c C-l 刷新Calendar窗口

;; Calendar支持生成LATEX代碼。
;; t m 按月生成日曆
;; t M 按月生成一個美化的日曆
;; t d 按當天日期生成一個當天日曆
;; t w 1 在一頁上生成這個周的日曆
;; t w 2 在兩頁上生成這個周的日曆
;; t w 3 生成一個ISO-SYTLE風格的當前週日歷
;; t w 4 生成一個從週一開始的當前週日歷
;; t y 生成當前年的日曆

;;EMACS Calendar支持配置節日:
;; h 顯示當前的節日
;; x 定義當天爲某個節日
;; u 取消當天已被定義的節日
;; e 顯示所有這前後共三個月的節日。
;; M-x holiday 在另外的窗口的顯示這前後三個月的節日。


;; 另外,還有一些特殊的,有意思的命令:
;; S 顯示當天的日出日落時間(是大寫的S)
;; p C 顯示農曆可以使用
;; g C 使用農曆移動日期可以使用


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 日曆設置結束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 設置日記 ;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;

(setq diary-file "~/diary");; 默認的日記文件
(setq diary-mail-addr "[email protected]")
(add-hook 'diary-hook 'appt-make-list)
;;當你創建了一個'~/diary'文件,你就可以使用calendar去查看裏面的內容。你可以查看當天的事件,相關命令如下 :
;; d 顯示被選中的日期的所有事件
;; s 顯示所有事件,包括過期的,未到期的等等

;; 創建一個事件的樣例:
;; 02/11/1989
;; Bill B. visits Princeton today
;; 2pm Cognitive Studies Committee meeting
;; 2:30-5:30 Liz at Lawrenceville
;; 4:00pm Dentist appt
;; 7:30pm Dinner at George's
;; 8:00-10:00pm concert

;; 創建事件的命令:
;; i d 爲當天日期添加一個事件
;; i w 爲當天周創建一個周事件
;; i m 爲當前月創建一個月事件
;; i y 爲當前年創建一個年事件
;; i a 爲當前日期創建一個週年紀念日
;; i c 創建一個循環的事件


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 設置日記結束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 自定義lisp包設置 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;=======================五筆輸入法設置======================
;; (add-to-list 'load-path "~/lisp/wubi/wubi")
;; (require 'wubi)
;; (register-input-method "chinese-wubi" "Chinese-GB" 'quail-use-package "wubi" "wubi")
;; (wubi-load-local-phrases)
;; (setq default-input-method "chinese-wubi")


;;這幾句Lisp代碼的作用是設置中文環境、註冊五筆字型輸入法。保存.emacs後請重新啓動emacs,
;;使得上面的設置生效。現在您可以用快捷鍵C-\ (同時按住 Ctrl和反斜線鍵)喚出五筆字型輸入法了。
;;在emacs的mode line上會出現“五筆字型”的字樣。

;=======================五筆輸入法設置結束===================


;======================= cscope 設置 =======================
;;使用 cscope 瀏覽源代碼,這個xcscope是個改進版,爲每一次查找的結果使用不同 buffer ,
;;這樣就可以保存以前的結果。

(add-to-list 'load-path "~/lisp/xcscope") ;; 將軟件包所在的路徑加到 EMACS 的 load-path
(require 'xcscope) ;; 加載相應的軟件

;; C-c s a 設定初始化的目錄,一般是你代碼的根目錄
;; C-s s I 對目錄中的相關文件建立列表並進行索引
;; C-c s s 序找符號
;; C-c s g 尋找全局的定義
;; C-c s c 看看指定函數被哪些函數所調用
;; C-c s C 看看指定函數調用了哪些函數
;; C-c s e 尋找正則表達式
;; C-c s f 尋找文件
;; C-c s i 看看指定的文件被哪些文件include


;===================== cscope 設置結束 ======================


;======================== tabbar設置 ========================
(add-to-list 'load-path "~/lisp/tabbar")
(require 'tabbar)
(tabbar-mode)
;========================tabbar設置結束=======================


;======================= wb-line-number設置 ==================
;;增加一個顯示行號的buffer
;(add-to-list 'load-path "~/lisp/wb-line-number")
;(require 'wb-line-number)
;(wb-line-number-enable)
;====================== wb-line-number設置結束 ================

;======================= setnu設置 ============================
;;再增加一個顯示行號的功能
(add-to-list 'load-path "~/lisp/setnu")
(require 'setnu)
(global-set-key [f2] (quote setnu-mode))

;======================= setnu設置結束 =====================


;====================== rect-mark設置 =========================
;; 按下shift拖拽鼠標即可選擇矩形區域
;; Support for marking a rectangle of text with highlighting.
(add-to-list 'load-path "~/lisp/rect-mark")
(require 'rect-mark)
(define-key ctl-x-map "r\C-@" 'rm-set-mark)
(define-key ctl-x-map [?r ?\C-\ ] 'rm-set-mark)
(define-key ctl-x-map "r\C-x" 'rm-exchange-point-and-mark)
(define-key ctl-x-map "r\C-w" 'rm-kill-region)
(define-key ctl-x-map "r\M-w" 'rm-kill-ring-save)
(define-key global-map [S-down-mouse-1] 'rm-mouse-drag-region)
(autoload 'rm-set-mark "rect-mark"
"Set mark for rectangle." t)
(autoload 'rm-exchange-point-and-mark "rect-mark"
"Exchange point and mark for rectangle." t)
(autoload 'rm-kill-region "rect-mark"
"Kill a rectangular region and save it in the kill ring." t)
(autoload 'rm-kill-ring-save "rect-mark"
"Copy a rectangular region to the kill ring." t)
(autoload 'rm-mouse-drag-region "rect-mark"
"Drag out a rectangular region with the mouse." t)

;; Use this section in your "~/.emacs" to modify picture mode so that
;; it automatically uses the rect-mark equivalents of many commands.

;; One vision of a better picture mode.
(add-hook 'picture-mode-hook 'rm-example-picture-mode-bindings)
(autoload 'rm-example-picture-mode-bindings "rect-mark"
"Example rect-mark key and mouse bindings for picture mode.")

;===================== rect-mark設置結束 =========================

;===================== info文件設置 ==============================
;;Info 的菜單是按 Info-directory-list 的順序列出的,而 Info-directory-list 是在啓動 info 時
;;用Info-default-directory-list 來初始的。所以要添加 Info 目錄是要設置 Info-default-directory-list。
;;在添加的 Info 目錄中,創建一個叫 dir 的文件(其實所有 Info-directory-list 裏有一個文件就行了,
;;在 ${emacs}/info 文件夾下有這個文件,修改這個也可以)。

(add-to-list 'Info-default-directory-list "~/lisp/info/")

;; n:跳轉到該節點的下一個節點;
;; p:跳轉到該節點的上一個節點;
;; m: 指定菜單名而選擇另外一個節點;
;; f:進入交叉引用主題;
;; l:進入該窗口中的最後一個節點;
;; TAB:跳轉到該窗口的下一個超文本鏈接;
;; RET:進入光標處的超文本鏈接;
;; u:轉到上一級主題;
;; d:回到 info 的初始節點目錄;
;; h:調出 info 教程;
;; q:退出 info。

;=================== info文件設置結束 ============================


;===================== AUCTeX設置 =================================
(load "~/lisp/auctex/site-lisp/auctex.el" nil t t)
(load "~/lisp/auctex/site-lisp/preview-latex.el" nil t t)
(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq-default TeX-master nil)
(add-hook 'LaTeX-mode-hook #'LaTeX-install-toolbar)
(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)

;===================== AUCTeX設置結束 =============================


;===================== 文件頭header設置 ===========================
;;當我們保存文件的時候,有很多信息可以自動更新.如何自動更新信息, 更新那些信息,
;也是可以完全自己配置. 包括文件名稱,最後一次修改時間,文件保存次數,最後一次修改的作者等等.
;;可以用 M-x make-header 自動生成文件頭信息.
(add-to-list 'load-path "~/lisp/header")
(require 'header)
(setq make-header-hooks '(header-mode-line
header-blank
header-file-name
header-blank
header-copyright
header-blank
header-author
header-creation-date
header-modification-author
header-modification-date
header-update-count
header-blank
header-history
header-blank
))
(setq header-copyright-notice " 源成工作室 作品" )
(make-local-variable 'user-full-name)
(make-local-variable 'user-mail-address)

;===================== 文件頭header設置結束 ==========================


;===================== template設置 =================================
(add-to-list 'load-path "~/lisp/template")
(require 'template)
(template-initialize)

;===================== template設置結束===============================

;===================== cedet設置 =====================================

(add-to-list 'load-path "~/lisp/cedet-1.0pre3/speedbar")
(add-to-list 'load-path "~/lisp/cedet-1.0pre3/eieio")
(add-to-list 'load-path "~/lisp/cedet-1.0pre3/semantic")
(add-to-list 'load-path "~/lisp/cedet-1.0pre3/common")
(require 'cedet)
;; (add-to-list 'load-path "~/lisp/ecb-2.32")
;; (require 'ecb)

;; Ecb的操作:
;; C-c . g d 目錄列表窗口
;; C-c . g s 源碼窗口
;; C-c . g m 方法和變量窗口
;; C-c . g h 歷史窗口
;; C-c . g l 最後選擇過的編輯窗口
;; C-c . g 1 編輯窗口1
;; C-c . g n 編輯窗口n
;; C-c . l c 選擇版面
;; C-c . l r 重畫版面
;; C-c . l t 拴牢版面(鎖定版面)
;; C-c . l w 拴牢可見的ecb窗口
;; C-c . \ 拴牢編繹窗口

;; 其中l爲小寫字母(L),大家別看錯!!

;======================cedet設置結束==================================


;;;;;;;;;;;;;;;;;;;;;;;;;; 自定義lisp包設置結束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;===================== GNUS設置 =================================
(setq gnus-select-method '(nntp "news.yaako.com"))
(setq gnus-default-subscribed-newsgroups
'( "cn.comp.os.linux")) ;;

;; (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net"))
;; (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourThirdProvider.net"))
;;想讓 Gnus 在多個的服務器上取新聞


;;中文相關
(set-language-environment 'Chinese-GB)
(setq gnus-default-charset 'chinese-iso-8bit
gnus-group-name-charset-group-alist '((".*" . chinese-iso-8bit))
gnus-summary-show-article-charset-alist
'((1 . chinese-iso-8bit)
(2 . gbk)
(3 . big5)
(4 . utf-8))
gnus-newsgroup-ignored-charsets
'(unknown-8bit x-unknown iso-8859-1))


(setq mail-sources
'((pop :server "pop3.163.com" ;; 在這裏設置pop3服務器
:user "XXXXXXX" ;; 用戶名
;; :port "110"
:password "XXXXXX"))) ;; 密碼
(setq gnus-secondary-select-methods '((nnfolder "")))

(setq user-full-name "XXXXXXXX") ;; 外發的郵件採用這個名字
(setq user-mail-address "[email protected]") ;;外發的郵件採用這個地址
(setq smtpmail-auth-credentials
'(("smtp.163.com" ;; SMTP服務器
25
"XXXXXX" ;; 用戶名
"XXXXXX"))) ;; 密碼
(setq smtpmail-default-smtp-server "smtp.163.com")
(setq smtpmail-smtp-server "smtp.163.com")
(setq message-send-mail-function 'smtpmail-send-it)

(setq nnmail-expiry-wait 3);;Gnus 默認的保質期是7天,如果你覺得時間不合適,可以自己設置

(add-hook 'gnus-article-prepare-hook
(lambda ()
(setq fill-column 60)
(gnus-article-fill-long-lines)))
;;讓gnus把這種郵件排版整齊後再顯示給我們看

(add-hook 'gnus-article-prepare-hook 'gnus-article-date-local)
;;將郵件的發出時間轉換爲本地時間

(gnus-add-configuration '(article
(vertical 1.0
(summary .4 point)
(article 1.0))))
;; 改變閱讀新聞時窗口的佈局,窗口劃分爲上4下6(比例)

(eval-after-load "mm-decode"
'(progn
(add-to-list 'mm-discouraged-alternatives "text/html")
(add-to-list 'mm-discouraged-alternatives "text/richtext")))
;另外,有些用web方式發出的郵件裏有html,加入下面的設置,只看其中的
;plain text部分:

(setq gnus-thread-sort-functions
'(
(not gnus-thread-sort-by-date)
(not gnus-thread-sort-by-number)
))
;;排序

(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
;; 有時訂閱了很多新聞組,堆在一起不好管理。這個功能可以創建目錄來分層管理

(setq gnus-read-newsrc-file nil gnus-save-newsrc-file nil)

;======================== GNUS設置結束 ===============================

;;=========================== 方便編程操作的設置=====================================

(setq compile-command "make")
;;emacs的默認compile命令是調用make -k,我把它改成了make。你也可以把它改成其他的,比如gcc之類的.

;;把c語言風格設置爲k&r風格
(add-hook 'c-mode-hook
'(lambda ()
(c-set-style "k&r")))

;;把C++語言風格設置爲stroustrup風格
(add-hook 'c++-mode-hook
'(lambda()
(c-set-style "stroustrup")))

;========================================================================

(load-library "hideshow")
(add-hook 'c-mode-hook 'hs-minor-mode)
(add-hook 'c++-mode-hook 'hs-minor-mode)
(add-hook 'java-mode-hook 'hs-minor-mode)
(add-hook 'perl-mode-hook 'hs-minor-mode)
(add-hook 'php-mode-hook 'hs-minor-mode)
(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
;;能把一個代碼塊縮起來,需要的時候再展開
;; M-x hs-minor-mode
;; C-c @ ESC C-s show all
;; C-c @ ESC C-h hide all
;; C-c @ C-s show block
;; C-c @ C-h hide block
;; C-c @ C-c toggle hide/show

;========================================================================

(defun my-c-mode-auto-pair ()
(interactive)
(make-local-variable 'skeleton-pair-alist)
(setq skeleton-pair-alist '(
(?` ?` _ "''")
(?\( ? _ " )")
(?\[ ? _ " ]")
(?{ \n > _ \n ?} >)))
(setq skeleton-pair t)
(local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "[") 'skeleton-pair-insert-maybe))
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)
;;輸入左邊的括號,就會自動補全右邊的部分.包括(), "", [] , {} , 等等。

;=========================================================================
(setq semantic-load-turn-everything-on t)
;(add-hook 'semantic-init-hooks 'semantic-idle-completions-mode)

(setq semanticdb-project-roots
(list
(expand-file-name "/")))
;;配置Semantic的檢索範圍

(setq semanticdb-default-save-directory "~/")
;;設置semantic.cache路徑

(global-set-key [(meta ?/)] 'hippie-expand)
;;M-/ 綁定到 hippie-expand

(autoload 'senator-try-expand-semantic "senator")
(setq hippie-expand-try-functions-list
'(senator-try-expand-semantic ;優先調用了senator的分析結果
try-expand-dabbrev ;當前的buffer補全
try-expand-dabbrev-visible ;別的可見的窗口裏尋找補全
try-expand-dabbrev-all-buffers ;所有打開的buffer
try-expand-dabbrev-from-kill
try-complete-file-name-partially
try-complete-file-name
try-expand-all-abbrevs
try-expand-list
try-expand-line
try-complete-lisp-symbol-partially
try-complete-lisp-symbol))
;設置 hippie-expand 的補全方式。它是一個優先列表, hippie-expand 會優先使用表最前面的函數來補全。

;=========================================================================


;==========================================================================

;;========================== 方便編程操作設置結束====================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章