史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 網路軟硬體架設技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-09-13, 11:15 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 不完全解讀 Emacs 編輯器—自由軟體的旗艦

希望本文能指引你進入Emacs的神奇世界

一 基本介紹
1. Emacs是什麼東西?

Emacs名字的正式由來是"Editing Macros"的簡稱,即「巨集編輯器」,當然這個「巨集」
和臭名昭著的「巨集病毒」沒有半點關係。也有一種說法是rms(Emacs的作者)最喜歡的
一家冰淇淋店的名字。經過將近20年的發展, Emacs的功能不斷的增強,現在更通用
的說法是"Emacs is the extensible, customizable, self-documenting real-time
display editor"。

也許你早就從網上,朋友或者某個討厭的Emacs fake zealot(比如我)那裡聽說過有
個 叫 "Emacs"的東西。也許你一直以為Emacs是來自遙遠的*nix世界的魔鬼,而對它
畏而遠之,但實際上,Emacs是一個真正的跨平台軟體,在最大限度上保證了平台無關
性,即使是在Windows下,也表現的非常出色,實際上我現在就是在Windows下寫這篇
文件。應廣大用戶的要求,微軟 的Visual Studio .Net 2005 beta版中已經實現了簡
單的模擬Emacs編輯模式,也許在正式版中會得到進一步的加強。

2. Emacs能做什麼?

顧名思義,Emacs的「本職工作」是編輯文本。這裡的文本包括的 範圍就很大了,像
我現在寫的這樣簡單的純文本,更主要是用來編輯各種程序的來源碼,比如C, C++,
C#, Perl, Python, html, php, lisp, matlab, tex....。

Emacs的強大體現在它的人
性化,和智能化。

比如不管在哪種語言模式下,都可以用 M-e, M-a 移動一句話,
M-{ M-} 移動一個段落,C-M-f, C-M-b 在平級的語法結構中移動,C-M-a C-M-e 在語
句塊中前後移動,等等等等。


你不需要去記住每個模式的操作方式,因為它們是如此
的一致,Emacs通常會很「聰明」的識別不同模式下各種語法結構的意義, 在任何模式
下 C-M-\ 都會把一段程式碼排版的整整齊齊, M-; 可以插入一條註釋並縮排到正確的地
方。

用Emacs編輯程式碼,可以實現語法加亮,折疊,隱藏,大綱模式,自動補全等基本功能
,可以直接使用編譯器和偵錯器來編譯,偵錯程序,可以直接把網頁程式碼送到瀏覽器
中預覽,可以把Emacs當成一個程式碼瀏覽器。

關於Emacs編寫程序方面的增強實在是太
多了,由於我水準很菜,也沒接觸過很多,總之當你有自己的需求的時候,直接去網
上找,Emacs很少會讓你失望的。

除了被用來編輯文本,Emacs也越來越多的被用來做其它事情,而且往往做得非常出色

dired 模式被用來作為文件管理器, 其功能比起同樣出色的Total Commander可一
點都不弱。


Gnus是訪問新聞組和接收郵件的利器,實現了專業層次的 Mail Client 功
能,Gnus 的 FAQ 中這樣寫道 "不要再問 『我能xxxx嗎?』之類的問題,因為你得到
的答案通常都是 『Yes』"。當然有點誇張了, 因為對於某些"私有"的東西,Gnus 支持
的並不好,比如微軟的 hotmail。

Emacs還可以被用來作為很多程序的前端,比如 mysql 資料庫, Matlab 軟體, 各種
Scheme 解釋器。

Emacs還有一大堆「亂七八糟」的功能,Emacs的日曆,能支持中國的曆法,天干地支
都支持,還能根據你所在地方的經度緯度計算日出日落時間。

配合Emacs日曆,可以寫
日誌,約會提醒等等和日程相關的事情。你要是想用Emacs做計算器,查字典,聊天,
播放mp3,使用p2p下載軟體,這些也不是不可以。

3. 為什麼要用Emacs?

看了前面一大堆功能(雖然不及Emacs實際功能的1%),你可能會說「你丫是不是有毛
病,這些功能都有專門的軟體去實現」。你說的沒錯。

當然每個人都有自己的選項習
慣。但是我的感覺是,Emacs不僅僅是能實現這些功能,關鍵是實現的往往非常出色,
不遜色於專有的軟體。

而且在Emacs中做這些事情,有一個統一的工作環境,不需要去
熟悉各種軟體的操作習慣,在Emacs中你會發現許多看似毫不相關的軟體功能,在
Emacs 中變得如此相似,我覺得這種感覺很美妙:P。

Emacs是一個「free software」,這裡的「free」是指「freedom」,而不是「免費」
的意思。當然對個人用戶來說,獲得Emacs通常都是免費的。
你永遠不會擔心「新版本
的完美破解怎麼還沒出來?」「昇級到新版本,key又失效了」,「這個軟體要是再便
宜一點我就能註冊了」,「這個軟體的作者真不厚道,老的註冊用戶都不能免費昇級了
」之類的問題。

Emacs屬於所有人,它是完全自由的,你可以自由的修改它以實現你需
要的功能,可以自由的和別人分享你修改後的程式碼,當然這一切都要遵循GPL。

4. Emacs與其它編輯器相比有什麼優點?

這個問題我沒辦法回答,因為我不敢對我不怎麼瞭解的東西妄加評論。尤其是在 et8
這藏龍臥虎的地方(我想你們也一樣吧?)。

我只能說Emacs 開放的 C+elisp 架構使
其具有幾乎無限的增強性,在增強性方面,是當之無愧的 No.1. 如果你看到其它某種
編輯器有個很酷的功能,不用懷疑,Emacs 可以實現它,如果你足夠強,可以自己動
手或者向某個你熟悉 elisp 高手求助。

總之,沒有什麼作為一個編輯器應該具有的
功能是 Emacs 實現不了的 。


5. Emacs 與其它編輯器相比有什麼缺點?

這個我倒可以說說:P。首先,用 Emacs 會上癮,在一個沒有 Emacs 的電腦上,你會
無精打采,沒有工作的熱情。如果你失去了自己的組態文件,你會變得痛苦萬分,因
為重新把 Emacs 組態一遍是很要花一番功夫的(除了 Emacs 還沒見過哪個軟體的配
置文件能讓人窮此一生的去研究)。

其次,Emacs 和其它編輯器相比是「臃腫」的,
和vim, editplus 這樣小巧的編輯器相比,它體積大,啟動慢,耗記憶體(現在我機器
上開了一個ue,四個emedit,和一個editplus,它們加起來消耗的記憶體還不到 Emacs
的一半 =_=),不過它的執行速度可一點都不慢,嘿嘿。


其實 Emacs 本來就不想做一
個小巧的編輯器,它的「正確使用方法」是:隨著你的系統一起啟動,直到你一天的
工作結束後關機,在這一天的工作當中,也許你根本不需要離開 Emacs。


最後,
Emacs 的操作習慣讓大部分用慣了 Windows 的人感到不爽, 很多人都是因為這個放棄
了它。剛開始你會覺得,Ctrl Alt Shift Esc + 各種各樣奇怪的按鍵方法很變態。

事實上 Emacs 的優勢不在擊鍵次數,使用 Emacs 就是要讓它少按鍵甚至不按鍵就實現
你想要的功呢。要說按鍵的簡潔,那老大應該是 Vim :P。再說, Emacs 的按鍵沒有你
想像的那麼複雜,它們的設計都有統一的規律, 熟悉了一種模式的按鍵,很容易就會熟
悉其它模式中的按鍵 , 這就是 Emacs 統一編輯環境帶來的好處。


6. 嘗試消除對 Emacs 的幾個偏見。

1. 「我X,啥破玩意,連語法加亮都沒有,刪了它」。

很多人這樣抱怨 ,不過稍微用腳丫子想一想,最早作為一個程序員給程序員寫的
編輯器,可能連這種最基本的功能都沒有麼?
實際上Emacs 對語法加亮的支持非常
好,它是根據語法分析來著色的,而不是死板的定義一堆的關鍵字和正則陳述式。


語法加亮其實是一個比較消耗資源的功能,特別是在 Emacs 誕生的那個年代。

而且 Emacs 所支持的機器比一般人聽過的都要多,不是每個機器都支持彩色
的....,類似的情況還有加亮選項區域。

還有可能是,最早使用Emacs 的超級大牛
根本不需要這個既消耗資源又對他們沒什麼用的功能。總之, Emacs 由於種種歷
史原因,保留了它特有的一些風格。只要是稍微有耐心的人,都會在 Option 表單
最顯眼的地方找到開啟它的選項。

2. 「開源的東西,還免費,品質靠不住」。

這麼認為的人應該不多。能在這個年代還抱有這種可笑的偏見只有兩種人:火星人
和極端的 Warez zealot。即便是微軟,也只會在他們的 FUD 戰術中「違心」的宣
稱一下而已,能騙一個是一個嘛:P。

附件中是我的一個 .emacs 組態文件,在我這裡測試完全正常,為了顯眼,放在第一個帖子裡
所上傳文件


;; Top line of .emacs: -*- coding: chinese-iso-8bit; -*-
(add-to-list 'load-path "c:/emas-lisp/mule-gbk-0.1.2004080701")
;;; GBK support
(setq w32-charset-info-alist
(cons '("gbk" w32-charset-gb2312 . 936) w32-charset-info-alist))
(require 'mule-gbk)
(set-w32-system-coding-system 'chinese-gbk)
(set-terminal-coding-system 'chinese-gbk)
(set-keyboard-coding-system 'chinese-gbk)
(set-language-environment 'chinese-gbk)
(set-clipboard-coding-system 'chinese-gbk)
(set-selection-coding-system 'chinese-gbk)
(setq locale-coding-system 'chinese-gbk)
(setq current-language-environment "Chinese-GBK")

;; Setup X Selection for mule-gbk
;(mule-gbk-selection-setup)

;;; Unicode support, for Emacs CVS (21.3.50) only
(when (fboundp 'utf-translate-cjk-mode)
;; Load modified utf-translate-cjk-mode
(require 'gbk-utf-mode)
;; Turn on utf-translate-cjk-mode
(utf-translate-cjk-mode 1)
;; Setup X selection for unicode encoding
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))

(create-fontset-from-fontset-spec
"-*-Lucida Sans Typewriter Std-normal-r-*-*-14-*-*-*-c-*-fontset-most,
chinese-gbk:-*-細明體-normal-r-*-*-16-*-*-*-*-*-gbk*-*,
chinese-gb2312:-*-細明體-normal-r-*-*-16-*-*-*-*-*-gb2312*-*,
chinese-cns11643-5:-*-細明體-medium-r-*-*-16-*-*-*-*-*-gbk*-*,
chinese-cns11643-6:-*-細明體-medium-r-*-*-16-*-*-*-*-*-gbk*-*,
chinese-cns11643-7:-*-細明體-medium-r-*-*-16-*-*-*-*-*-gbk*-*,
korean-ksc5601:-*-Batang-normal-r-*-*-16-*-*-*-c-*-ksc5601.1987*-*,
chinese-big5-1:-*-細明體-normal-r-*-*-16-*-*-*-*-*-big5*-*,
chinese-big5-2:-*-細明體-normal-r-*-*-16-*-*-*-*-*-big5*-*,
japanese-jisx0208:-*-MS UI Gothic-medium-r-*-*-16-*-*-*-*-*-jisx0208*-*" t)

(setq default-frame-alist
(append
'((font . "fontset-most"))
default-frame-alist))

(setq inhibit-startup-message t)

;關閉起動時的那個「開機畫面」。

(setq column-number-mode t)

;顯示列號。

(setq mouse-yank-at-point t)

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


(setq default-major-mode 'text-mode)

;把預設的 major mode 設定為 text-mode, 而不是幾乎什麼功能也沒有的
;fundamental-mode.

(show-paren-mode t)
(setq show-paren-style 'parentheses)

;括號匹配時顯示另外一邊的括號,而不是煩人的跳到另一個括號。

(mouse-avoidance-mode 'animate)

;游標靠近滑鼠游標時,讓滑鼠游標自動讓開,別擋住視線。

(setq frame-title-format "emacs@%b")

;在標題欄顯示buffer的名字,而不是 emacs@!#*&!(&@# 這樣沒用的提示。

(auto-image-file-mode)

;讓 Emacs 可以直接開啟和顯示圖片。

(cond ((fboundp 'global-font-lock-mode)
;; Load the font-lock package.
(require 'font-lock)
;; Maximum colors
(setq font-lock-maximum-decoration t)
;; Turn on font-lock in all modes that support it
(global-font-lock-mode t)))

;進行語法加亮。

;設定一下制作備份時的版本控制,這樣更加安全。
(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 backup-directory-alist '(("." . "~/.autosave")))


;讓 dired 可以遞回的拷貝和移除目錄。

(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)


;;加亮選部分
(transient-mark-mode t)

(setq mouse-wheel-mode t)

;按照windowz用戶的習慣使用 `C-x C-c C-v'
(setq cua-mode t)

;按照windowz用戶的習慣,使用 'Ctrl Alt Shift + 方向鍵移動和選項文本'
;。
(setq pc-selection-mode t)

;設定日曆表的中文天干地支,在日期上按 `p C' 就可以顯示農曆和干支。
(setq chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "已" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
["子" "丑" "寅" "卯" "辰" "巳" "午" "未" "申" "酉" "戌" "亥"])


;ibuffer
(require 'ibuffer)
(global-set-key (kbd "C-x C-b") 'ibuffer)


;瀏覽剪貼板中的內容,綁定到 'C-c k'.
(require 'browse-kill-ring)
(global-set-key [(control c)(k)] 'browse-kill-ring)
(browse-kill-ring-default-keybindings)


;ido mode. 超強的buffer切換工具
(require 'ido)

;;{{{ ido: fast switch buffers

(add-hook 'ido-define-mode-map-hook 'ido-my-keys)

(defun ido-my-keys ()
"Set up the keymap for `ido'."
;; common keys
(define-key ido-mode-map "\C-e" 'ido-edit-input)
(define-key ido-mode-map "\t" 'ido-complete) ;; complete partial
(define-key ido-mode-map "\C-j" 'ido-select-text)
(define-key ido-mode-map "\C-m" 'ido-exit-minibuffer)
(define-key ido-mode-map "?" 'ido-completion-help) ;; list completions
(define-key ido-mode-map [(control ? )] 'ido-restrict-to-matches)
(define-key ido-mode-map [(control ?@)] 'ido-restrict-to-matches)

;; cycle through matches
(define-key ido-mode-map "\C-r" 'ido-prev-match)
(define-key ido-mode-map "\C-s" 'ido-next-match)
(define-key ido-mode-map [right] 'ido-next-match)
(define-key ido-mode-map [left] 'ido-prev-match)

;; toggles
(define-key ido-mode-map "\C-t" 'ido-toggle-regexp) ;; same as in isearch
(define-key ido-mode-map "\C-p" 'ido-toggle-prefix)
(define-key ido-mode-map "\C-c" 'ido-toggle-case)
(define-key ido-mode-map "\C-a" 'ido-toggle-ignore)

;; keys used in file and dir environment
(when (memq ido-cur-item '(file dir))
(define-key ido-mode-map "\C-b" 'ido-enter-switch-buffer)
(define-key ido-mode-map "\C-d" 'ido-enter-dired)
(define-key ido-mode-map "\C-f" 'ido-fallback-command)

;; cycle among directories
;; use [left] and [right] for matching files
(define-key ido-mode-map [down] 'ido-next-match-dir)
(define-key ido-mode-map [up] 'ido-prev-match-dir)

;; backspace functions
(define-key ido-mode-map [backspace] 'ido-delete-backward-updir)
(define-key ido-mode-map "\d" 'ido-delete-backward-updir)
(define-key ido-mode-map [(meta backspace)] 'ido-delete-backward-word-updir)
(define-key ido-mode-map [(control backspace)] 'ido-up-directory)

;; I can't understand this
(define-key ido-mode-map [(meta ?d)] 'ido-wide-find-dir)
(define-key ido-mode-map [(meta ?f)] 'ido-wide-find-file)
(define-key ido-mode-map [(meta ?k)] 'ido-forget-work-directory)
(define-key ido-mode-map [(meta ?m)] 'ido-make-directory)

(define-key ido-mode-map [(meta down)] 'ido-next-work-directory)
(define-key ido-mode-map [(meta up)] 'ido-prev-work-directory)
(define-key ido-mode-map [(meta left)] 'ido-prev-work-file)
(define-key ido-mode-map [(meta right)] 'ido-next-work-file)

;; search in the directories
;; use C-_ to undo this
(define-key ido-mode-map [(meta ?s)] 'ido-merge-work-directories)
(define-key ido-mode-map [(control ?\_)] 'ido-undo-merge-work-directory)
)

(when (eq ido-cur-item 'file)
(define-key ido-mode-map "\C-k" 'ido-delete-file-at-head)
(define-key ido-mode-map "\C-l" 'ido-toggle-literal)
(define-key ido-mode-map "\C-o" 'ido-copy-current-word)
(define-key ido-mode-map "\C-v" 'ido-toggle-vc)
(define-key ido-mode-map "\C-w" 'ido-copy-current-file-name)
)

(when (eq ido-cur-item 'buffer)
(define-key ido-mode-map "\C-b" 'ido-fallback-command)
(define-key ido-mode-map "\C-f" 'ido-enter-find-file)
(define-key ido-mode-map "\C-k" 'ido-kill-buffer-at-head)
))

(ido-mode t)
;;}}}


;自動補全
(global-set-key [(meta ?/)] 'hippie-expand)

(setq hippie-expand-try-functions-list
'(try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
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))

;日出日落時間計算
(setq calendar-latitude 30.15)
(setq calendar-longitude 120.10)
(setq calendar-location-name "somewhere")


;解決中文 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)

;記住上次編輯的文件。
(if (equal "21.3.1" emacs-version)
(desktop-load-default)
(desktop-save-mode t))
(desktop-read)
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2004-09-13, 11:16 AM   #2 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

1. 獲得 Emacs

廢話少說,最直接的辦法,去 Emacs 的老窩直接下載。下載位址是

http://ftp.gnu.org/pub/gnu/emacs/

Emacs 現在的穩定版本是 21.3。我個人推薦的是去

http://savannah.gnu.org/projects/emacs/

下載最新的 CVS 版本,CVS Emacs 做了很多有用的改進, 特別是在中文支持方面做
得更好了, 當然 21.3 也沒有問題, 如果你不會用 CVS 就算了。而且從源碼編譯
Emacs 往往需要 Visual Studio。有點麻煩,誰讓 Windows 下連個免費的編譯器都
沒有呢。權宜之計,可以從這裡下載最近編譯的 CVS Emacs

ftp://soft.eeatech.org:11021/incomin...r/Gnu%20Emacs/

不過我不能保證連接的有效性。真希望 et8 有個熱心人能做一下這個工作,就像
Mplayer K&K 版一樣。

感謝五樓提供的資訊,這個連接應該比較可靠,雖然版本不如上一個新

http://sourceforge.net/projects/nqmacs/

2. 安裝方法

Emacs 不需要安裝,屬於大家所提倡的那種"綠色軟體",解壓縮後,進入 bin 目錄,
雙按 runemacs.exe 就可以執行了。還有,把 emacs 的 bin
目錄的絕對路徑,增加到你的PATCH 環境變數中,如何設定
環境變數? 我的電腦->右鍵->內容->進階->環境變數....不說了,這些基本的
windows 操作您比我明白。這一步不是必須的,但是 有些必要


2. 基本組態

Emacs 的組態文件是一個叫 .emacs 的文件,不知道 M$ 哪兩
個部門的溝通出了點問題,導致 windows explorer 無法直接新增 ^.* 這樣的 文件
(而這樣的檔案名在windows文件系統中卻又是合法的,嘖嘖), 所以 ,在
windows下也可以 用_emacs 來替代。

下一步,讓emacs找到你的 .emacs 組態文件,如果你什麼都懶得做,就直接仍到
C:/ 下面好了。但是我最強烈 的推薦大家,稍
微多做一點點工作,以便以後工作的更好。設定一個「主目錄」,這個目錄
通常就是

c:/Documentsand Settings/Administrator

你也可以設定能其它目錄,以方便重裝系統的時候制作備份。

設定主目錄有兩種方法

1. 新增一個名字叫 HOME 的環境變數。變數值就是你的想
要的目錄路徑名稱。

2. 如果你覺得第一種方法不過癮,想讓 Windowz 最強大的註冊表發揮一下功能,
也可以。新增一個資料項

HKEY_CURRENT_USER\Software\GNU\Emacs

在裡面增加一個 REG_SZ 檔案類型的字串串,名字就叫
HOME, 值就是你想要的目錄路徑名。

設定好主目錄後,把 .emacs(_emacs) 扔進去。最基本的設定就算完成了。

3. 中文支持

Emacs 是一個真正的支持多語言編輯器。試試看

M-x view-hello-file

會列出Emacs支持的所有語言。如果有些大方塊在裡面,那不是Emacs 的錯,因為你
的系統裡沒有那種字體。

如果你下載的是那個 CVS Emacs,據說預設就支持中文了。如果是21.3 ,可能需要一
點組態。

開啟 .emacs(_emacs) 文件,你現在還不會用 Emacs, 所以還是先用notepad, ue,
editplus 等你熟悉的編輯器吧。

注意:綠色部分為程式碼,直接copy過去就可以,';'開頭的行
,是elisp的註釋行,但願你的編輯器已經支持它了。

加入以下幾行。



(set-terminal-coding-system 'chinese-iso-8bit)
(set-keyboard-coding-system 'chinese-iso-8bit)
(set-language-environment 'chinese-gb)
(set-clipboard-coding-system 'chinese-iso-8bit)
(set-selection-coding-system 'chinese-iso-8bit)
(setq locale-coding-system 'chinese-iso-8bit)
(setq current-language-environment "Chinese-GB")

注意: 以上部分只適用於組態 gb2312,如果你要組態隨後的 gbk,把這段程式碼刪掉!
啟動emacs, 試著敲幾個中文,應該不會有問題了。

Emacs 預設支持的是 gb2312 的中文,雖然大部分情況是足夠用了,但偶爾還是會遇
到 gb2312 以外的字串,比如我們前總理的名字。不管出於什麼理由,的確有辦法讓
Emacs 支持 gbk 字串集。設定稍微麻煩一點。首先去這裡下載最新的,一定要最新
的! mule-gbk

http://mule-gbk.sourceforge.net

解壓縮後看看裡面的 README 文件,那個文件是為 Linux 寫的,所以可以直接看我
下面的說明。

在 .emacs(_emacs) 文件的第一行,務必是第一行! 加入如下內容。

;; Top line of .emacs: -*- coding: chinese-iso-8bit; -*-

這是為了在後面使用中文的字體名字。

緊接著的一行是:

(add-to-list 'load-path "d:/emas-lisp/mule-gbk-0.1.2004080701")

引號中的部分是你的 mule-gbk 解壓縮到的目錄,建議你和我一樣,建立一個目錄專
門存放自己的 .el 文件,我的是 d:/emacs-lisp。

最強烈的注意: emacs 的目錄分隔符號是 '/' 而不是 '\', 所以目錄要寫成
x:/your/patch/ 的形式,而不是 x:\your\patch\ ,沒注意這個問題,帶來不便,sorry

隨後的部分是

(setq w32-charset-info-alist
(cons '("gbk" w32-charset-gb2312 . 936) w32-charset-info-alist))
(require 'mule-gbk)
(set-w32-system-coding-system 'chinese-gbk)
(set-terminal-coding-system 'chinese-gbk)
(set-keyboard-coding-system 'chinese-gbk)
(set-language-environment 'chinese-gbk)
(set-clipboard-coding-system 'chinese-gbk)
(set-selection-coding-system 'chinese-gbk)
(setq locale-coding-system 'chinese-gbk)
(setq current-language-environment "Chinese-GBK")

接下來要區別一下,如果你下的是標準的 21.3,採用下面的設定:

;; Setup X Selection for mule-gbk
(mule-gbk-selection-setup)

如果你下的是 CVS Emacs,採用這個設定:

;;; Unicode support, for Emacs CVS (21.3.50) only
(when (fboundp 'utf-translate-cjk-mode)
;; Load modified utf-translate-cjk-mode
(require 'gbk-utf-mode)
;; Turn on utf-translate-cjk-mode
(utf-translate-cjk-mode 1)
;; Setup X selection for unicode encoding
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))


分歧到此為止,下面的部分,是統一的:

(create-fontset-from-fontset-spec
"-*-Courier New-normal-r-*-*-14-*-*-*-c-*-fontset-most,
chinese-gbk:-*-細明體-normal-r-*-*-16-*-*-*-*-*-gbk*-*,
chinese-gb2312:-*-細明體-normal-r-*-*-16-*-*-*-*-*-gb2312*-*,
chinese-cns11643-5:-*-細明體-medium-r-*-*-16-*-*-*-*-*-gbk*-*,
chinese-cns11643-6:-*-細明體-medium-r-*-*-16-*-*-*-*-*-gbk*-*,
chinese-cns11643-7:-*-細明體-medium-r-*-*-16-*-*-*-*-*-gbk*-*,
korean-ksc5601:-*-Batang-normal-r-*-*-16-*-*-*-c-*-ksc5601.1987*-*,
chinese-big5-1:-*-細明體-normal-r-*-*-16-*-*-*-*-*-big5*-*,
chinese-big5-2:-*-細明體-normal-r-*-*-16-*-*-*-*-*-big5*-*,
japanese-jisx0208:-*-MS UI Gothic-medium-r-*-*-16-*-*-*-*-*-jisx0208*-*" t)

(setq default-frame-alist
(append
'((font . "fontset-most"))
default-frame-alist))


以上一大段是新增了一個字串集 'fontset-most'。英文字體是 Courier New, 如
果你有更漂亮的等寬字體,把名字改了就是,雖然我也知道 Tahoma 更漂亮,但它
真的不適合用在編輯器裡。確保程式碼無誤,啟動 Emacs, 敲一下前總理的名字,看
看正常沒有?如果正常,說明你的 Emacs gbk 已經組態好了。

4. 做一點改變,讓 Emacs 符合 Windows 用戶的習慣(慎用慎用)。

;按照windowz用戶的習慣使用 `C-x C-c C-v'
(setq cua-mode t)

;按照windowz用戶的習慣,使用 'Ctrl Alt Shift + 方向鍵移動和選項文本'
(setq pc-selection-mode t)
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2004-09-13, 11:18 AM   #3 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

5. 一些減輕痛苦的設定

;;開啟語法加亮
(cond ((fboundp 'global-font-lock-mode)
;; Load the font-lock package.
(require 'font-lock)
;; Maximum colors
(setq font-lock-maximum-decoration t)
;; Turn on font-lock in all modes that support it
(global-font-lock-mode t)))


;;加亮選部分
(transient-mark-mode t)

;關閉起動時的那個「開機畫面」。
(setq inhibit-startup-message t)

;顯示列號。
(setq column-number-mode t)

;不要在滑鼠點擊的地方插入剪貼板的內容,不然你的文件很容易變得亂七八糟。
(setq mouse-yank-at-point t)

;括號匹配時加亮顯示另外一邊的括號,而不是煩人的跳到另一個括號。
(show-paren-mode t)
(setq show-paren-style 'parentheses)

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

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

;設定一下制作備份時的版本控制,這樣更加安全。
(setq version-control t)
(setq kept-new-versions 3)
(setq delete-old-versions t)
(setq kept-old-versions 2)
(setq dired-kept-versions 1)

;設定自動備份檔案儲存的目錄,以免把你的磁牒弄得亂七八糟(你可以
;去掉這一行試試看:P ~/.autosave 表示 主目錄下的一個叫
;.autosave 的子目錄,按照前面的方法設定主目錄。
(setq backup-directory-alist '(("." . "~/.autosave")))

;讓 dired 可以遞回的拷貝和移除目錄。
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)

;;滾輪支持
(setq mouse-wheel-mode t)

;一個加強的 buffer 列表模式
(require 'ibuffer)
(global-set-key (kbd "C-x C-b") 'ibuffer)


;瀏覽剪貼板中的內容,綁定到 'C-c k'.
(require 'browse-kill-ring)
(global-set-key [(control c)(k)] 'browse-kill-ring)
(browse-kill-ring-default-keybindings)

;ido mode. 超強的buffer切換工具, Emacs 也有通常編輯器的那種
;在 Tab 中選項 buffer 的 mode,但是用了ido 以後,我再也不需要
;他它了,ido mode 是我見過最方便的 buffer 切換模式。
(require 'ido)
(ido-mode t)

;極強的自動補全,幫定到 M-/ 上面了。
;基本就是,你編輯了一段時間以後,只要輸入字串串的前幾個字串,
;按一下 M-/ ,就會補全後面的,多按幾次可以選項。補全的原則是"就
;近選項",試試就知道了,多數情況都讓人滿意。

(global-set-key [(meta ?/)] 'hippie-expand)

(setq hippie-expand-try-functions-list
'(try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
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))


;設定日曆表的中文天干地支,在日期上按 `p C' 就可以顯示農曆和干支。
(setq chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "已" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
["子" "丑" "寅" "卯" "辰" "巳" "午" "未" "申" "酉" "戌" "亥"])

;設定你所在地方的經度緯度,在日曆中就可以檢視日出日落時間。
(setq calendar-latitude 30.15)
(setq calendar-longitude 120.10)
(setq calendar-location-name "Somewhere")

;記住上次編輯的文件,這樣你下次進入Emacs 的時候,就會直接開啟
上次編輯的東西,就和沒結束過一樣。建議,把這個設定放在組態文
件的最末尾!
(require 'desktop)
(desktop-save-mode t)
(desktop-read)

基本的設定就到這裡,有興趣的話,就繼續往下看。

6. 開始學習
Emacs 的學習程序是充滿挑戰和快樂的。也許沒有你原來想
象的那麼恐怖。Emacs 原有的了一個入門的 Tutorial 就是最好的入門
教材。如果你有興趣繼續學習 Emacs,學習這個 Tutorial 是
必須的,下面教你如何檢視它。

1. 直接從表單 Help->Emacs Tutorial
2. 如果你下載的是 CVS Emacs,就更好了,已經有一份中文的版本。
Type:
C-u C-h t TAB

選項中文版本
如果是 21.3,恐怕就要耐性子讀英文了,直接 C-h
t 開啟它。


這個 Tutorial 是交互式的,看起來很輕鬆,耐心的把它看完,你就是
一個准 Emacs User 了
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
linux - 完全用Linux工作 psac 作業系統操作技術文件 10 2006-10-02 04:41 AM
軟體 - Emacs 是一種信仰!世界最強編輯器介紹 psac 網路軟硬體架設技術文件 1 2006-09-22 10:03 PM
1.網路管理語言 Perl 準備工作 飛鳥 網路疑難應用技術研討區 0 2005-10-05 06:08 PM
理解 GNU/Linux psac 網路疑難應用技術研討區 13 2004-04-16 12:17 PM


所有時間均為台北時間。現在的時間是 02:33 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1