这本是我个人主页上用Emacs-wiki写的一篇关于Emacs的笔记,因为个人主页站点不能用了,现在转移到这里。不过 ,虽然我会做一些改变,但是还是没有Emacs-wiki发布的那么好!
什么是Emacs ? Emacs is the extensible, customizable, self-documenting real-time display editor. 简单的说, EMACS是一个以编辑器为主体的系统.它支持解析语言LISP,这就奠定了它的无限扩展的特性.你可以将任何希望做的事情以LISP写的插件方式,来扩展EMACS ,使其支持这一功能.由于它这种 与时代俱进 的设计思想和结构体系,让它在漫长的30 年中一直广为流行.它的作者Richard Stallman 还获得麦克阿瑟基金会24万美金的 天才奖 .
我总认为 一个好的软件不是以它的外在形式,而是以它的内在逻辑紧密的联系在一起. 当你不曾领会它的内在逻辑时,它那看似杂乱无章苦涩难懂的外表足以让你望而却步.但是,当你真正领会到它的精髓之际,你会幡然醒悟,突然发现什么才是真正的 方便, 智能 和 自动化 ! 这是一个天才的天才发明.
在知道GNU/Emacs能做什么之前,先看看我用Emacs都做了些什么吧!我想没有人敢很明确的告诉你GNU/Emacs究竟能做什么,不能做什么.没有界限就是它的界限!
知道了GNU/Emacs能干个啥了,就让我们开始干点啥子吧.如果你的系统上还没有安装Emacs的话(这几乎不可能,如果我没有记错的话,Emacs是Linux系统默认安装的.)如果你用的是该死的Windows系统的话,请到这里看看Windows上的Emacs如何设置和使用.或者下载这个手册自己Have a look 一下!
我是凭自己的使用习惯来写这个文档的.可能很多地方不太 标准 .不过,也无大碍,本来写给自己看的,我就是这么开始我的Emacs之旅的.呵呵!首先声明一下:C 是Ctrl健;M是Atl健(终端和MAC机上是Esc健.(声明完毕)
按健 | 作用 |
---|---|
C-x C-f | 查找文件 |
C-x C-w | 文件另存 |
C-x C-s | 保存文件 |
C-x C-c | 退出Emacs |
C-x C-h | 查看在线帮助 |
C-x u | 取消上一步操作 |
以上是最基本的操作,如果需要在Emacs中编辑文档,那么需要知道一下操作:
按健 | 作用 | 按键 | 作用 |
---|---|---|---|
C-v | 下滚一页 | M-v | 上滚一页 |
C-l | 本行居中 | C-k | 删除本行 |
C-f | 前移一字 | C-b | 后移一字 |
M-f | 前移一词 | M-b | 后移一词 |
C-n | 下移一行 | C-p | 上移一行 |
C-a | 跳到行首 | C-e | 跳到行尾 |
M-a | 跳到句首 | M-e | 跳到句尾 |
M-< | 光标到顶 | M-> | 光标到底 |
M-w | 复制所选区域 | C-w | 剪切所选区域 |
C-s | 文中向后查找 | C-y | 粘贴缓冲区 |
C-@ | 设置Mark | M-g | 跳至指定行 |
其中,复制,剪切之前要用C-@设定Mark,然后用C-n,C-p或方向键选中要复制或剪切的区域,然后用C-w或M-w进行复制或剪切操作.至此,就完全可以用Emacs编辑文档了.
;; Set up the keyboard so the delete key on both the regular keyboard
;; and the keypad delete the character under the cursor and to the right
;; under X, instead of the default, backspace behavior.
(global-set-key [delete] 'delete-char)
(global-set-key [kp-delete] 'delete-char)
;; turn on font-lock mode
(global-font-lock-mode t)
;; enable visual feedback on selections
(setq-default transient-mark-mode t)
;; always end a file with a newline
(setq require-final-newline t)
;; stop at the end of the file, not just add lines
(setq next-line-add-newlines nil)
(when window-system
;; enable wheelmouse support by default
(mwheel-install)
;; use extended compound-text coding for X clipboard
(set-selection-coding-system 'compound-text-with-extensions))
(custom-set-variables
;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
;; Your init file should contain only one such instance.
'(case-fold-search t)
'(current-language-environment "Chinese-GB")
'(default-input-method "chinese-py-punct")
'(ecb-options-version "2.32")
'(global-font-lock-mode t nil (font-lock))
'(show-paren-mode t nil (paren))
'(text-mode-hook (quote (turn-on-auto-fill text-mode-hook-identify)))
'(transient-mark-mode t)
'(uniquify-buffer-name-style (quote forward) nil (uniquify)))
(custom-set-faces
;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
;; Your init file should contain only one such instance.
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;这下面的是我自己设置的工作环境! 萧皓天
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq inhibit-startup-message t)
(set-selection-coding-system 'cn-gb-2312)
(setq inhibit-default-init t)
(set-scroll-bar-mode nil)
(setq default-tab-width 4)
(auto-image-file-mode)
(tool-bar-mode nil)
(menu-bar-mode nil)
(setq column-number-mode t)
(setq kill-ring-max 200)
(setq default-major-mode 'text-mode)
(define-key c-mode-map [return] 'newline-and-indent)
(c-toggle-auto-state)
(c-toggle-hungry-state)
(add-hook 'c-mode-hook
'(lambda ()
(c-set-style "k&r"))
;;set c++ style as stroustrup style
(add-hook 'c++-mode-hook
'(lambda()
(c-set-style "stroustrup"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;显示时间和邮件提示.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(display-time-mode 1)
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(setq display-time-use-mail-icon t)
(setq display-time-interval 10)
(add-hook 'c-mode-hook '(lambda () (c-set-style "k&r")))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;一些高级设置,方便工作. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'wb-line-number) ;;显示行号,看代码的时候用最好.
;;(wb-line-number-toggle)
(require 'ibuffer)
(global-set-key (kbd "C-x C-b") 'ibuffer)
(add-to-list 'load-path "/usr/share/emacs/21.2/eieio")
(add-to-list 'load-path "/usr/share/emacs/21.2/semantic")
(setq semantic-load-turn-everything-on t)
(require 'semantic-load)
(add-to-list 'load-path "/usr/share/emacs/21.2/speedbar")
(add-to-list 'load-path "/usr/share/emacs/21.2/ecb")
(require 'ecb)
(setq ecb-auto-activate t
ecb-tip-of-the-day nil
inhibit-startup-message t
ecb-auto-compatibility-check nil
ecb-version-check nil)
;(require 'tabbar)
;(tabbar-mode)
;(global-set-key (kbd "") 'tabbar-backward-group)
;(global-set-key (kbd "") 'tabbar-forward-group)
;(global-set-key (kbd "") 'tabbar-backward)
;(global-set-key (kbd "") 'tabbar-forward)
(require 'color-theme)
;;(color-theme-blue-mood)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 绑定一些自己的快捷键 .
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(global-set-key (kbd "M-z") 'color-theme-blue-sea)
(global-set-key (kbd "M-g") 'goto-line)
(global-set-key (kbd "M-2") 'wb-line-number-enable)
(global-set-key (kbd "C-2") 'set-mark-command)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 以下是其它插件的功能扩展 ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 在Emacs中收发邮件. ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mew")
(autoload 'mew "mew" nil t)
(autoload 'mew-send "mew" nil t)
(setq mew-icon-directory "/usr/local/share/emacs/site-lisp/mew/etc")
(setq mew-use-cached-passwd t)
(setq mew-pop-size 0) ;; 没有限止邮件大小
(setq mew-pop-delete nil)
(setq mew-config-alist
'(("default"
("name" . "Dragon")
("user" . "xiao_crazy")
("mail-domain" . "163.com")
("pop-server" . "pop3.163.com")
("pop-port" . "110")
("pop-user" . "xiao_crazy")
("pop-auth" . pass)
("smtp-server" . "smtp.163.com")
("smtp-port" . "25")
("smtp-user" . "xiao_crazy")
("smtp-auth-list" . ("LOGIN" "PLAIN" "CRAM-MD5")))))
(when (boundp 'utf-translate-cjk)
(setq utf-translate-cjk t)
(custom-set-variables
'(utf-translate-cjk t)))
(if (fboundp 'utf-translate-cjk-mode)
(utf-translate-cjk-mode 1))
(require 'flyspell)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; End of MEW in Emacs ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 在EMACS中浏览WEB网页并支持中文 ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'w3m-load)
(setq w3m-display-inline-image t)
(setq w3m-use-mule-ucs t)
(setq w3m-use-toolbar t)
(setq w3m-use-cookies t)
(setq w3m-bookmark-file-coding-system 'chinese-iso-8bit)
(setq w3m-coding-system 'chinese-iso-8bit)
(setq w3m-default-coding-system 'chinese-iso-8bit)
(setq w3m-file-coding-system 'chinese-iso-8bit)
(setq w3m-file-name-coding-system 'chinese-iso-8bit)
(setq w3m-terminal-coding-system 'chinese-iso-8bit)
(setq w3m-input-coding-system 'chinese-iso-8bit)
(setq w3m-output-coding-system 'chinese-iso-8bit)
(setq w3m-tab-width 8)
(setq w3m-home-page "http://www.gun.org")
(setq w3m-view-this-url-new-session-in-background t)
(add-hook 'w3m-fontify-after-hook 'remove-w3m-output-garbages)
(defun remove-w3m-output-garbages()
(interactive)
(let ((buffer-read-only))
(setf (point) (point-min))
(while (re-search-forward "[/200-/240]" nil t)
(replace-match " "))
(set-buffer-multibyte t))
(set-buffer-modified-p nil))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; End of configure W3M in Emacs ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 用EMACS 打开,编辑远程的文件,设定TELNET,FTP在EMACS中. ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-to-list 'load-path "/usr/share/emacs/21.2/tramp/lisp")
(setq tramp-unified-filenames t)
(setq tramp-default-method "scp")
(setq tramp-auto-save-directory "/tmp")
(setq auto-save-file-name-transtorms
'(("//~/[~/]*://(.+///)" "/tmp///2")))
(setq tramp-chunksize 448)
(setq ange-ftp-default-user t)
(require 'ange-ftp)
(require 'tramp)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'emacs-wiki)
(add-hook 'emacs-wiki-mode-hook
(lambda ()
(define-key emacs-wiki-mode-map (kbd "C-c C-h") 'emacs-wiki-preview-html)
(define-key emacs-wiki-mode-map (kbd "C-c C-c") 'emacs-wiki-preview-source)
(define-key emacs-wiki-mode-map (kbd "C-c C-v") 'emacs-wiki-change-project)
))
;; (setq emacs-wiki-grep-command "glimpse -nyi /"%W/"")
(setq emacs-wiki-publishing-directory "publish")
(setq emacs-wiki-meta-content-coding "gbk")
(setq emacs-wiki-directories '("~/WiKi"))
(setq emacs-wiki-meta-charset "gbk")
(setq emacs-wiki-style-sheet "<link rel='stylesheet' type='text/css' href='../css/main.css'>")
(setq emacs-wiki-inline-relative-to 'emacs-wiki-publishing-directory)
(defun emacs-wiki-preview-source ()
(interactive)
(emacs-wiki-publish-this-page)
(find-file (emacs-wiki-published-file)))
(defun emacs-wiki-preview-html ()
(interactive)
(emacs-wiki-publish-this-page)
(browse-url (emacs-wiki-published-file)))
(setq emacs-wiki-projects
`(("default" . ((emacs-wiki-directories . ("~/WiKi"))))
("work" . ((fill-column . 65)
(emacs-wiki-directories . ("~/workwiki/"))))))
(require 'emacs-wiki-menu)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun my-emacs-wiki-chmod-644-published-file (file)
(let* ((page (emacs-wiki-page-name file))
(published (emacs-wiki-published-file page)))
(shell-command (concat "chmod 644 " published))))
(add-hook 'emacs-wiki-after-file-publish-hook
'my-emacs-wiki-chmod-644-published-file)