学习Emacs

Vim、Emacs配置和使用
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

学习Emacs

#1

帖子 qinglangee » 2008-11-18 13:24

最近转到Ubuntn下了,所以要好好学习下Linux下的神之编辑器,之前用过编辑器之神,可惜只学会了点简单的查找替换字符串的功能。
先是安装,费不少事。

Emacs23 配置指南

代码: 全选

2楼       曲折的安装历程
3楼       字体的配置,没用上,23默认也挺好的
4楼       不重起,就更新 .emacs 的设置
5楼        一些基本的配置
6楼       自己的.emacs文件
7楼       Emacs快捷键
8楼        线上帮助的使用方法
9楼     设置颜色主题
10楼     安装Emacs插件
11楼     书签的操作
12楼     编译整个目录下的文件
13楼     寄存器操作
14楼     用到过的插件
16楼     emacs正则表达式
25楼     在Windows下使用Emacs
中间一哥们的回复没了,搞得我得改楼层了

自己写的小函数,有了就添加

代码: 全选

15楼     删除一行
上次由 qinglangee 在 2009-07-19 17:59,总共编辑 17 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#2

帖子 qinglangee » 2008-11-18 20:48

现在以下的都不需要了,只要一个命令

代码: 全选

sudo apt-get install emacs23
======================================================
2009-08-20---------更新 改了2BUG
现在23.1已经发布,GNU Emacs 23.1 可从 GNU 的 FTP 站点下载。
编译安装前要先安装libncurses5-dev,否则你当你安装完之后,执行emacs会提示
emacs: Cannot open termcap database file
还要有X需要的一些包,否则config时需要用--without-x,安装后make install 时报的makeinfo is missing - cannot build manuals错误也没有了

代码: 全选

sudo apt-get install libncurses5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libxpm-dev
sudo apt-get install libgif-dev
sudo apt-get install libtiff4-dev
安装

代码: 全选

./configure
make
make install
装好的在/usr/local/bin里有
2009-08-20---------
参考
在debian下安装Emacs23
先是CVS安装:
还没装CVS

代码: 全选

sudo apt-get install ssh cvs
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/cvsroot/emacs co emacs
下载进行中...
完成了,生成了一个emacs目录,新建了个emacs23的目录,进入emacs23
第一步,configure

代码: 全选

cd emacs23
../emacs/configure
报错

代码: 全选

configure: error: C compiler cannot create executables
See `config.log' for more details.
google了下下,说是一般都是 gcc 編譯環境没有配置好,直接執行

代码: 全选

apt-get install gcc libc6-dev
就可以解決
再次

代码: 全选

cd emacs23
../emacs/configure
又报

代码: 全选

configure: error: You seem to be running X, but no X development libraries
were found.  You should install the relevant development files for X
and for the toolkit you want, such as Gtk+, Lesstif or Motif.  Also make
sure you have development files for image handling, i.e.
tiff, gif, jpeg, png and xpm.
If you are sure you want Emacs compiled without X window support, pass
  --without-x
to configure.
加上 --without-x再次

代码: 全选

cd emacs23
../emacs/configure    --without-x
这次没说什么错误,应该是成功了吧。
第二步:make

代码: 全选

make
make完了后没报什么错,但运行src/emacs -q
报错:emacs: Cannot open termcap database
没理它,继续

代码: 全选

make install
完了以后还是
报错:emacs: Cannot open termcap database
没辙了
又google了一下,原先说是安装termcap-compat,再安装的时候说这个包已被废弃了
继续google,又发现个帖子说要安装libncurses5-dev,试试吧
总算成功了,不过安装的是个没有X的,现在安装libgtk2.0-dev又碰到问题,以后再说吧
总结,没有X的安装

代码: 全选

sudo apt-get install ssh cvs libc6-dev  libncurses5-dev
configure  --without-x
make
make install
不过装完了以后,我也不知道装哪去了,以前就有个EMACS,现在装的不知道怎么打开 :em06

装libgtk2.0-dev装不了,最后用的这个给装上了

代码: 全选

sudo aptitude install libgtk2.0-dev

======================================================================
2008-12-01
由于最近没看片,没发现这个方法还有副作用 :em20
昨天想看个片的时候,突然发现mplayer不能用了,打开就一个画面就不动了
还有一个是chmsee也不能用了,打chm文件说没有程序,在命令行里也说没安装(我正好有机会实验了下firefox的chm插件,发现只能一页一页地翻,很不方便),只好又重新装了
mplayer也重新装了,装好了后,又引起一大堆麻烦,开机时Xwindows和GNOME都报了错,还好能正常开机,也不知道引起了什么问题,mount的Windows下的盘也打不开了
想想也没有什么其它动作会引起这些了,估计就是装这个时候一大堆的降级引起的
======================================================================

还有下面的找不到
libXpm libjpeg libgif/libungif libtiff
用apt-get install的方法,说是找不到这些包
于是在新立得里查了下,把这些包相关的带-dev的包都装了一遍,再configure终于没有错误了
成了,都快到明天了,明天再make吧
现在是明天了 :em06

代码: 全选

make
make install
都很顺利
现在可以打朱镕基的镕了,但是刚装好的字体好小,小得汉字都看不见
附件
字体太TM小了
字体太TM小了
上次由 qinglangee 在 2010-02-03 22:12,总共编辑 7 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#3

帖子 qinglangee » 2008-11-21 21:42

字体没给设置好,先设置一下字体了
参考了两个博客的帖子:Emacs23字体优化emacs23字体配置

首先,编辑“/.Xresouces”文件,将其内容设置如下:

代码: 全选

Emacs.font: Lucida Sans Typewriter-11
Emacs.FontBackend: xft
Xft.dpi: 96
Xft.hinting: None
第二个的是

代码: 全选

Xft.antialias: 1
Xft.hinting: 1
Xft.hintstyle: hintfull
Xft.rgba: rgb

Emacs.FontBackend: xft
其次,编辑“~/.emacs”文件,增加对中文字体的定义:

代码: 全选

;; 设置中文字体
(set-fontset-font "fontset-default" 'gb18030 '
    ("Microsoft YaHei" . "unicode-bmp"))
第二个的是

代码: 全选

;设置字体
(set-default-font "Bitstream Vera Sans Mono-10")
(set-fontset-font "fontset-default"
                  'han '("Microsoft YaHei" . "unicode-bmp"))
启动Emacs

代码: 全选

emacs  --snapshot-gtk --enable-font-backend

代码: 全选

emacs   --enable-font-backend
选择的配色主题是”Dark Laptop“

最后发现emacs字体太小不是字体本身的原因,是ubuntu设置的分辨率的问题
这里二楼改改就可以了
上次由 qinglangee 在 2008-11-23 16:38,总共编辑 1 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#4

帖子 qinglangee » 2008-11-21 23:45

不重起,就更新 .emacs 的设置(转)
我刚刚使用 Emacs 的时候,总是

vi ~/.emacs

然后重新启动 emacs ,效率很低 ,暗自嘟囔, emacs 怎么没有这种功能,不重起,就自动更新 .emacs 的设置 呢?

后来我发现,这个功能完全没有必要,我的做法是:

* 用 emacs 打开 .emacs 文件,C-x C-e 光标前面的运行一条语句。立即生效。
* 选择一个 region , M-x eval-region
* M-x load-file ~/.emacs
* M-x eval-buffer

都是立即生效,可以马上试验一条语句的效果。 例如,在任何一个文件中,写

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

把光标停在在这条语句后面, C-x C-e ,马上看到 emacs 的 标题栏上发生变化。

我用这种方法调试我的每一个小的配置文件,按上篇文章说的方法, 把他放在 ~/Emacs/myconfig/my-site-start.d 中。
上次由 qinglangee 在 2008-11-22 8:13,总共编辑 1 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#5

帖子 qinglangee » 2008-11-22 0:23

一些基本的配置
和兄弟姐妹们讨论和推广emacs

(setq default-major-mode 'text-mode);一打开就起用 text 模式。
(global-font-lock-mode t);语法高亮
(auto-image-file-mode t);打开图片显示功能
(fset 'yes-or-no-p 'y-or-n-p);以 y/n代表 yes/no,可能你觉得不需要,呵呵。
(column-number-mode t);显示列号
(show-paren-mode t);显示括号匹配
(display-time-mode 1);显示时间,格式如下
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(tool-bar-mode nil);去掉那个大大的工具栏
;(scroll-bar-mode nil);去掉滚动条,因为可以使用鼠标滚轮了 ^_^
(mouse-avoidance-mode 'animate);光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。很好玩阿,这个功能
(setq mouse-yank-at-point t);支持中键粘贴
(transient-mark-mode t);这个忘了,郁闷!
(setq x-select-enable-clipboard t);支持emacs和外部程序的粘贴
(setq frame-title-format "zhan@%b");在标题栏提示你目前在什么位置。你要把zhan改成自己的用户名
(setq default-fill-column 80);默认显示 80列就换行



hvj的讨论和推广emacs贴19:

emacs中的键绑定吓跑了很多人,觉得太难记了,其实你完全可以自己来重新定义这些键。我的如下:

PHP 代码:
;;统一设置键帮定,并尽量放在配置文件的最后,以免被绑定的键不小心被后面的配置文件覆盖
;;常用习惯,F1打开帮助,常用帮助有info和woman(就是在emacs中看man)
(global-set-key [f1] 'info)
;;恢复,常用键
(global-set-key [f2] 'undo)
;;反恢复,不是很常用,但是绑定了还是方便些
(global-set-key [f3] 'redo)
;;F4,kill键,习惯设置,关闭当前buffer
(global-set-key [f4] 'kill-this-buffer)
;;打开一个终端,根据你的爱好可以绑定为:eshell,shell,terminal-emulator
(global-set-key [f5] 'term)
;;文件管理器,常用
(global-set-key [f6] 'dired-jump)
;;同clear相识,具体功能在hvj-functions.el讲过
(global-set-key [f7] 'hvj-line-to-top-of-window)
;;本人正在学scheme,常用
(global-set-key [f8] 'run-scheme)
;;看新闻组,常用的很,不过更多时间现在sir里
(global-set-key [f9] 'gnus)
;;习惯设置,打开/关闭菜单
(global-set-key [f10] 'menu-bar-mode)
;;编译等,暂时还不常用
(global-set-key [f11] 'compile)
(global-set-key [f12] 'gdb)

;;习惯设置,Home键设定光标到文件开头
(global-set-key [(home)] 'beginning-of-buffer)
;;习惯设置,End键设定光标到文件结尾
(global-set-key [(end)] 'end-of-buffer)

;;meta在常用PC键上就是Alt键
;;这三个绑定主要是光标移动的
(global-set-key [(meta down)] 'goto-line)
(global-set-key [(meta left)] 'backward-sexp)
(global-set-key [(meta right)] 'forward-sexp)

;;用Emacs时常用多个窗口,窗口之间的移动很常见
;;默认的绑定感觉不对劲,换了
(global-set-key [(control o)] 'other-window)
;;这就是我的切换buffer的设置,同windows操作相识
;;没法,windows用了两年多,有些习惯还真不好改
;;不过emacs的配置就是好配,随你配
(global-set-key [(control tab)] 'tabbar-forward)
;;这个设置是改变outline的快捷键前缀
;;outline主要用于编程等,目前用的不多
(setq outline-minor-mode-prefix [(control o)])

;;默认的Ctrl-z是什么来着,关闭emacs吧,好像还是强行关闭,不好,用C-x c就好了
;;我就将Ctrl-z作为我的键的绑定
(define-prefix-command 'ctl-z-map)
(global-set-key (kbd "C-z") 'ctl-z-map)
;;编译当前emacs-lisp源码为elc
(global-set-key (kbd "C-z b") 'emacs-lisp-byte-compile)
;;打开我得日历
(global-set-key (kbd "C-z c") 'calendar)
;;字典功能,就是查单词
(global-set-key (kbd "C-z d d") 'dictionary-lookup-definition)
;;与上面类似
(global-set-key (kbd "C-z d s") 'dictionary-search)
;;查询当前单词的匹配的单词,用于补全单词
(global-set-key (kbd "C-z d m") 'dictionary-match-words)
;;字典提示模式,同字典的自动取词功能相似
(global-set-key (kbd "C-z d t") 'dictionary-tooltip-mode)
;;启动我的IRC客户端,到sir去
(global-set-key (kbd "C-z e s") 'erc-irc)
;;到fans聊天去
(global-set-key (kbd "C-z e f") 'erc-fans)
;;启动拼写检查模式,只检查打开后输入的单词
(global-set-key (kbd "C-z f m") 'flyspell-mode)
;;对整个buffer进行拼写检查
(global-set-key (kbd "C-z f b") 'flyspell-buffer)
;;打开gnus
(global-set-key (kbd "C-z g") 'gnus)
;;数数本文件有多少文字
(global-set-key (kbd "C-z h c") 'hvj-count-words-region)
;;同Clear键
(global-set-key (kbd "C-z h l") 'hvj-line-to-top-of-window)
;;拼写检查
(global-set-key (kbd "C-z i") 'ispell-minor-mode)
;;debug
(global-set-key (kbd "C-z j") 'jdb)
;;查看前面删除的内容记录
(global-set-key (kbd "C-z k") 'browse-kill-ring)
;;打印当前buffer
(global-set-key (kbd "C-z l") 'lpr-buffer)
;;启动我得maxima,漂亮模式
(global-set-key (kbd "C-z m") 'imaxima)
;;绑定两个narrow功能
(global-set-key (kbd "C-z n n") 'narrow-to-region)
(global-set-key (kbd "C-z n w") 'widen)
(global-set-key (kbd "C-z o") 'occur)
;;几个小游戏
(global-set-key (kbd "C-z p g") 'gomoku)
(global-set-key (kbd "C-z p t") 'tetris)
;;由于在html-helper-mode模式中F4键失效,用这个绑定来关闭buffer
(global-set-key (kbd "C-z q") 'kill-this-buffer)
;;带正则表达式的搜索
(global-set-key (kbd "C-z r") 'query-replace-regexp)
;;我得scheme也是可以在emacs中运行的
(global-set-key (kbd "C-z s") 'run-scheme)
;;我的终端
(global-set-key (kbd "C-z t") 'term)
;;可以在emacs编辑文件使用vim习惯,常用的是vi-mode和viper-mode
(global-set-key (kbd "C-z v") 'vi-mode)
;;我的文件管理器
(global-set-key (kbd "C-z u d") 'dired-jump)
(global-set-key (kbd "C-z u f") 'folding-mode)
(global-set-key (kbd "C-z u o") 'outline-minor-mode)
;;查询service,见hvj-other-elisp
(global-set-key (kbd "C-z u s") 'services-look-up)
;;wiki中的绑定设置,还用的不多
(global-set-key (kbd "C-z w c") 'emacs-wiki-change-project)
(global-set-key (kbd "C-z w f") 'emacs-wiki-find-file)
(global-set-key (kbd "C-z w h") 'emacs-wiki-preview-html)
(global-set-key (kbd "C-z w i") 'emacs-wiki-index)
(global-set-key (kbd "C-z w p") 'emacs-wiki-publish)
(global-set-key (kbd "C-z w s") 'emacs-wiki-search)
;;我的浏览器
(global-set-key (kbd "C-z w w") 'w3m)
;;同C-z b有点不同,在编译后并加载
(global-set-key (kbd "C-z x") 'emacs-lisp-byte-compile-and-load)
;;同yank有点不一样,但具体怎样忘了,感觉这个比yank好点
(global-set-key (kbd "C-z y") 'clipboard-yank)
;;修改后的设定mark的绑定,由于经常忘了放住control键,就给这个功能两个绑定了
(global-set-key (kbd "C-z z") 'set-mark-command)
(global-set-key (kbd "C-z C-z") 'set-mark-command)

;;there are severl other key-map below in other files
;;ctrl-f-folding-mode-prefix
;;ido key-map
;;severl self define functions related key-bindings.

这是我配置文件总结的最后一贴了,有空我会修复其中的一些不足和错误之处。希望这对大家使用Emacs能有所帮助。也欢迎大家多提意见,对这些配置文件多一些修改意见
上次由 qinglangee 在 2008-11-22 9:56,总共编辑 2 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#6

帖子 qinglangee » 2008-11-22 7:50

自己的.emacs文件

Windows的

代码: 全选

;设置在Windows下使用Server模式
(defun my-done ()
(interactive)
(server-edit)
(make-frame-invisible nil t))
(global-set-key (kbd "C-x C-c") 'my-done)

; (require 'xcscope) ;;加载xcscope
(require 'xcscope) ;;加载xcscope

公共的

代码: 全选

; zh's .emacs file
;; zh.ch
;; 2008-11-28

(load "~/myconf/emacs/packages/subdirs");导入插件
; 一般设置===========
;;(setq initial-frame-alist '((top . 0) (left . 0) (width . 142) (height . 49)));启动自动最大化(数据自己调整,注意格式,如(top . 0),圆点前后都要留有空格)
;;一般设置
(setq default-major-mode 'text-mode);一打开就起用 text 模式
(add-hook 'text-mode-hook 'turn-on-auto-fill);启用自动填充模式
(global-font-lock-mode t);语法高亮
(auto-image-file-mode t);打开图片显示功能
(fset 'yes-or-no-p 'y-or-n-p);以 y/n代表 yes/no,可能你觉得不需要,呵呵。
(column-number-mode t);显示列号
(tool-bar-mode nil);去掉那个大大的工具栏
(menu-bar-mode nil);去掉菜单栏
;;;(scroll-bar-mode nil);去掉滚动条
(customize-set-variable 'scroll-bar-mode 'right);把掉滚动条放右边
(mouse-avoidance-mode 'jump);光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。很好玩阿,这个功能
(setq make-backup-files nil);不产生备份文件
(setq mouse-yank-at-point t);支持中键粘贴
(setq-default cursor-type 'bar) ; 设置光标为竖线
(setq x-select-enable-clipboard t);支持emacs和外部程序的粘贴
(setq frame-title-format "zhan@%b");在标题栏提示你目前在什么位置。你要把zhan改成自己的用户名
;;;设置标题栏显示文件的完整路径名
(setq frame-title-format
   '("%S" (buffer-file-name "%f"
    (dired-directory dired-directory "%b"))))
;;增加一个prefix
(define-prefix-command 'ctl-/-map)
(global-set-key (kbd "C-/") 'ctl-/-map)
; 编程相关的============================
;;编程相关的
(setq default-tab-width 4);设置Tab宽度为4
(setq tab-width 4 indent-tabs-mode nil);设置Tab换为4个空格,不用Tab进行排版
(show-paren-mode t);显示括号匹配
; 安装的el==============================
;; 设置颜色主题
(require 'color-theme);导入主题
(color-theme-initialize);初始化
(color-theme-charcoal-black);选用的主题
;;; 备用的
;;;;(color-theme-pierson)
;;;;(color-theme-robin-hood)
;;;;(color-theme-gray30)
;;;;(color-theme-comidia)
;;;;(color-theme-bharadwaj-slate)
;;;;(color-theme-billw)
;;;;(color-theme-charcoal-black)
;;;;(color-theme-calm-forest)
;; 导入重做
(require 'redo)
;; tabbar
(require 'tabbar)
(tabbar-mode t)
;;设置键绑定
(global-set-key [C-up] 'tabbar-backward-group)
(global-set-key [C-down] 'tabbar-forward-group)
(global-set-key [C-left] 'tabbar-backward)
(global-set-key [C-right] 'tabbar-forward)
; 自定义键绑定==========================
(global-set-key [f6] 'dired-jump);文件管理器
(global-set-key [f10] 'menu-bar-mode);打开/关闭菜单
(global-set-key (kbd "C-v") 'yank);粘贴
(global-set-key (kbd "C-z") 'undo);撤消
(global-set-key (kbd "C-y") 'redo);重做
(global-set-key [delete] 'delete-char);delete 删除一个字符

; 各种模式的设置========================
;; 大纲模式
;;添加键绑定
(add-hook 'outline-minor-mode-hook
    (function (lambda ()
        (global-set-key (kbd "C-/ s") 'show-subtree)
        (global-set-key (kbd "C-/ d") 'show-branches)
        (global-set-key (kbd "C-/ h") 'hide-subtree)
        (global-set-key (kbd "C-/ j") 'hide-leaves)
        (global-set-key (kbd "C-/ k") 'hide-sublevels)
        ())))
;;; emacs模式的大纲模式
(add-hook 'emacs-lisp-mode-hook
     (function (lambda ()
              (setq outline-regexp ";+ ")
            (outline-minor-mode)
            (hide-body)
               )))
;; org mode
(require 'org-install)

; 多句的编写的小方法====================
;;多句的编写的小方法

;;; 这个忘了是从哪个地方弄来的,在保存~/.emacs文件自动编译为.elc文件
;;;;目前只是对~/.emacs有效,其余的*.el文件还没有去弄,以后有空我会改的
;;;;小知识:由于配置文件越来越大,你的*.el配置文件最好都编译为*.elc文件,这样在启动emacs速度会有很大的提升
(defun autocompile nil
  "compile itself if ~/.emacs"
  (interactive)
  (if (string= (buffer-file-name) (concat default-directory ".emacs"))
      (byte-compile-file (buffer-file-name))))
(add-hook 'after-save-hook 'autocompile)

;;;删除一行
(defun zl-delete-line nil
  "delete the whole line"
  (interactive)
  (beginning-of-line);光标移动到行首
  (push-mark);做个标记
  (beginning-of-line 2);移动到下一行行首
  (kill-region (point) (mark)));光标和标记之间的删掉

(global-set-key (kbd "C-d") 'zl-delete-line);删除一行

;;新建一行,不管光标在哪
(defun zl-newline nil
  "open new line belowe current line"
  (interactive)
  (end-of-line)
  (newline))

(global-set-key [S-return] 'zl-newline);绑定Shift-回车

;;本行上面新建一行,不管光标在哪
(defun zl-newline-up nil
  "open new line up current line"
  (interactive)
  (beginning-of-line)
  (newline)
  (backward-char))

(global-set-key [C-S-return] 'zl-newline-up);绑定Ctrl-shift-回车
上次由 qinglangee 在 2009-08-14 22:46,总共编辑 9 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#7

帖子 qinglangee » 2008-11-22 7:58

emacs快捷键
参考:
学习GNU Emacs
Emacs快捷键的总结(转)
学习 Emacs 的基本模式和编辑特性
文件操作

C-x C-v 打开一个文件,取代当前缓冲区

编辑操作

C-a 移到行首
C-e 移到行尾
M-x goto-line 跳到指定行
C-M-f 向前匹配括号
C-M-b 向后匹配括号
C-x ESC ESC 执行历史命令记录,M-p选择上一条命令,M-n选择下一条命令

注意:C-y可以粘贴连续C-k删除的内容;先按C-y,然后按M-y可以选择粘贴被删除的内容
C-_ or C-x u or C-/ 撤消操作
使用 C-t,transpose-chars 函数,以调换光标前的单个字符和光标后的单个字符;使用 M-t,transpose-words 函数,以调换光标前后的单个单词
transpose-lines 函数,C-x C-t,可以调换光标所在的行和光标前面的行
uppercase-word 函数(绑定到 M-u)可以将光标处到光标所在词的词尾之间的所有文本都转换为大写字母。类似地,downcase-word(绑定到 M-l)可以将光标处到光标所在词的词尾之间的所有文本转换为小写字母

使用 kill-rectangle 功能,C-x r k,可以剪切当前矩形区块
要删除 您所标记的矩形区块中的字符,而不保存它们,可以使用 delete-rectangle,它绑定到了 C-x r d
运行 clear-rectangle 功能,用空格字符替换整个区域,该功能与 C-x r c 进行了绑定。
运行 open-rectangle 功能,C-x r o。执行以上的操作,将使用空格字符填充整个矩形区块
运行 yank-rectangle,该操作与 C-x r y 进行了绑定。这一命令用于在光标处插入上一次剪切的矩形区块

标记操作
1 在 C-space 之前使用通用参数 C-u 命令。使用这种方法,可以更改 C-space 的含义,不再设置标记,而是移动 到标记处
2 使用 exchange-point-and-mark 功能,它与 C-x C-x 进行了绑定。它的工作方式正如其名称所表示的:它将光标移动到标记处,但是同时,它在光标处设置一个新的标记
3 mark-paragraph 功能,M-h,将当前段落标记为区域
4 要立刻为整个缓冲区设置标记,可以运行 mark-whole-buffer 功能,C-x h


执行SHELL命令

M-! 执行SHELL命令 (shell-command)
M-| 针对某一特定区域执行命令(shell-command-on-region), 比如 C-x h M-|uuencode

窗口操作

C-x 0 关闭本窗口
C-x s 保存所有窗口的缓冲
1 compare-windows 功能可以比较两个窗口中的文本,从两个窗口中光标处的字符开始,并将光标移动(在两个窗口中)到第一个不同的字符处
2 switch-to-buffer-other-window C-x 4 b 垂直地将当前窗口划分为两半,提示输入缓冲区以使用底部的窗口,并将其作为活动窗口。
3 display-buffer C-x 4 C-o 在另一个窗口中显示一个缓冲区,提示输入缓冲区以使用另一个窗口,但保持当前窗口为活动窗口。(如果仅存在一个窗口,那么垂直地划分该窗口以显示另一个缓冲区。)
4 find-file-other-window C-x 4 f 在新的缓冲区中打开新的文件,在新的垂直窗口中绘制它。
5 scroll-all 切换 scroll-all 次要模式。当它处于打开状态时,将同时滚动显示当前窗口中的缓冲区的所有窗口,并滚动均等的相应距离。
6 switch-to-buffer-other-frame C-x 5 b 在另一个框架中打开指定的缓冲区。如果不存在其他框架,则创建一个新的框架。
7 find-file-other-frame C-x 5 f 在另一个框架中打开指定的文件。如果不存在其他框架,则创建一个新的框架。
8 other-frame C-x 5 o 移动到下一个框架,并使其成为活动框架。
9 delete-frame C-x 5 0 删除当前框架,并使下一个框架成为活动框架。
10 delete-other-frames C-x 5 1 删除当前框架之外的所有框架。


目录操作

C-x d 打开目录模式
D 马上删除当前文件
C 拷贝当前文件
R 重名名当前文件
+ 新建文件夹
[n]m 标记光标所在的文件,如果指定n,则从光标所在的文件起后n个文件被标记
[n]u 取消当前光标标记的文件,n的含义同上
t 反向标记文件
%-m 正则标记
q 退出目录模式

说明:在目录模式中,如果输入!,在命令行中包含*或者?,有特殊的含义。*匹配当前光标所在的文件和所有标记的文件,?分别在每一个标记的文件上执行该命令。

搜索模式

C-s C-w 以光标所在位置的字为关键字搜索
C-s C-s 重复上次搜索
C-r C-r 重复上次反向搜索
C-s ENTER C-w 进入单词搜索模式
C-r ENTER C-w 进入反向单词搜索模式
M-% search-string ENTER replace-string ENTER 交互替换
最后,您可以运行 query-replace 函数,它会对每个需要替换的实例提出询问。它绑定到 M-%
C-r 在进入查找/替换模式后,该命令进入迭代编辑模式

C-M-x 退出迭代编辑模式,返回到查找/替换模式
C-M-s 向前正则搜索
C-M-r 向后正则搜索
C-M-% 正则交互替换
要对短语进行匹配,而不管单词之间存在何种分隔,可使用 Emacs 的单词搜索。
无论使用前向或者逆向搜索都可以这样操作,按 Enter,输入 C-w,然后给出要搜索的单词或者短语
上次由 qinglangee 在 2008-11-23 10:18,总共编辑 4 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#8

帖子 qinglangee » 2008-11-22 10:05

线上辅助说明的使用方法
Emacs User's Guide(中文)

EMACS 除了自学教材可供参考外,它还提供了其它的线上辅助说明功能,让使用者可以随时查阅需要的相关讯息。 EMACS 的线上辅助说明都是以 ``Ctrl-h'' 为开端,其种类 有以下二种:

* Ctrl-h
* Ctrl-h Ctrl-h

键入 Ctrl-h (help-command),萤幕的最下端会出现如下的讯息: C-h(Type ? for further options)- 此时的 ``Ctrl-h'' 只是用做前置字(prefix key),它是用来等候使用者输入其它的指令。若输入 ``?'',则萤幕的下方会出现所有可使用的选择,使用者可根据需要来选择合适的选项。若键入两次的 ``Ctrl-h''Ctrl-h (felp-for-help),萤幕下方 会出现: type one of the options listed or Space to scroll 此时 EMACS 会另外开启一个视窗,将所有与求助的选项都列出来,且会做一简要的说明,要卷动此视窗则键入 Space。此新开启的视窗共有二十一个选项,包括: a b c f C-f i k C-k l m n p s t v w C-c C-d C-n C-p C-w. 使用这二十一个选择项的方法非常简单,只要在 ``Ctrl-h'' 之後输入任一个选择就可以了。例如,要选择 ``a'' ,则执行 ``Ctrl-h a'' 即可。

现在将 EMACS 常用的线上辅助说明一一作解释。EMACS 常用的线上辅助说明有:

* Ctrl-h c
* Ctrl-h k
* Ctrl-h w
* Ctrl-h a
* Ctrl-h v
* Ctrl-h i

``Ctrl-h c'' 与 ``Ctrl-h k'' 的功能相似, 二者都是在寻求与 Hotkey
有关的讯息。二者唯一的差别,就在於对指令的解释详细与否而已。
`` Ctrl-h c'' 是简述与 Hotkey 连结的命令,而 ``Ctrl-h k''则详述连结
Hotkey 的命令。二者都有一个前题的预设,那就是都是先知道
Hotkey 为何,而想进一步知道此 Hotkey 所使用命令的名称。今举
``Ctrl-x Ctrl-c'' 的例子来说明二者的差别。

键入 ``Ctrl-h c RET'' (RET,亦即键盘上的 Enter 键。任何一个指令输入完毕时,必需 紧跟著一个 Enter。此作用是用以告知系统,指令输入已经结束,可以开始执行相关的动作了。) 则萤幕下方会出现 Describe key briefly: - 在 ``:'' 的後面键入 ``Ctrl-x Ctrl-c'',则在原先出现 Describe key briefly: - 的地方则出现 C-x C-c runs the command save-buffers-kill-emacs'' 键入 ``Ctrl-h k RET'',则萤幕下方出现 Describe key: - 在 ``:'' 的後面键入 ``Ctrl-x Ctrl-c'',则 EMACS 会另以一个视窗显示如下的讯息: save-buffers-kill-emacs: Offer to save each buffer, then kill this emacs process. With prefix arg, silently save all file-visiting buffers, then kill. 此讯息的第一行是 Hotkey 所连结命令的全名,以後的行数则是对此命令的详细说明。 `` Ctrl-h w''w (where-is) 的用法与 `` Ctrl-h c'' 和 `` Ctrl-h k'' 正好相反。 `` Ctrl-h w'' 是在知道EMACS 的命令而欲知是否有相对应的 Hotkey 时所使用的。例如键入 ``Ctrl-h w'',萤幕的下方会出现

where is command:

在 ``:'' 之後键入 ``save-buffers-kill-emacs'',则在原处会出现

save-buffers-kill-emacs is on C-x C-c 所以想知道命令是否有相对应的 Hotkey,可以此方法查知。 ``Ctrl-h w'' 可以使用 EMACS 的 completion ,但其最大的 不便处,就是必需给予指令的第一个字元。如 ``save-buffers-kill-emacs'', 必需先给予以 s 开头的子字串,才能逐步使用 EMACS 的 completion 。若不键入 s 开头的子串,而键入 s 之後的 任何字串,则无法找到相对应的指令,所以使用 ``Ctrl-h w'' 必需要记著指令的第一个字。除此之外, EMACS 的线上辅助说明还提供了另一种帮助,可让使用者键入任意的子字串,都可以找到相对应的指令,那就是 `` Ctrl-h a''。 键入 ``Ctrl-h a'' 则萤幕的下方会出现 command-apropos (regexp): 此时只要给予与命令相关的任一子字串或 `` regular expression'' 6.3 节会讨论何谓 regular expression)再按下 RET, EMACS 会另开一个视窗,将所有涵盖此子字串或 regular expression 的指令全列出来。 此指令与 `` Ctrl-h w'' 最大不同处如下:

1. 使用 `` Ctrl-h a'' 所键入的子字串,并不限於指令的第一个字元, 而 `` Ctrl-h w'' 则必需以指令的第一个字为起始字。 使用 `` Ctrl-h a'',可给予指令中任何位置的子字串。
2.  
3. `` Ctrl-h a'' 无法使用 completion,而 `` Ctrl-h w'' 可使用 completion。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#9

帖子 qinglangee » 2008-11-22 10:38

设置颜色主题
参考:
Emacs color-theme
给emacs安装color-theme

首先下载 color-theme.el ,然后把它放在你的加载路径里面,把themes目录也要拷贝到上面的路径中,最后在你的 ~/.emacs 里面加上

代码: 全选

 (require 'color-theme)
(color-theme-initialize)
就可以使用了。现在重新启动一下 Emacs ,然后就可以用 M-x color-theme-select 来选择你喜欢的颜色主题了,它会打开一个列表,在每个列表项目上回车会应用那个颜色主题,如果选上了某个主题,按一下 d ,会出现类似:

color-theme-sitaramv-nt is an interactive compiled Lisp function in `color-theme.el'.
(color-theme-sitaramv-nt)
Black foreground on white background.
Includes faces for font-lock, widget, custom, speedbar.
[back]

的东西,其中那句 (color-theme-sitaramv-nt) 加入到你的 ~/.emacs 里面去,就可以永久应用这个颜色主题了。
Footnote

1. 你可以在这里得到 color-theme 6.5.5 ,也可以到 EmacsWiki 上去找最新版的 color-theme.el 。
上次由 qinglangee 在 2008-11-22 13:33,总共编辑 2 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#10

帖子 qinglangee » 2008-11-22 11:30

安装Emacs插件
参考:
如何安装Emacs

Emacs 的软件,一般都是一个压缩包。因为 Emacs 没有象 Python 那样完善的安装机制,所以这个安装过程一般都要看着说明文档自己一步一步来。作为一个 Emacs 平台下的软件,它总得有这样几个组成部分:

1. 有部分是用 elisp 写的,不然的话没法给 Emacs 用;
2. 可能有部分是平台相关的代码,一般都是些可执行的二进制文件或者脚本。
3. 可能还有一些info格式的相关文档。

可执行的二进制文件只要放在$PATH环境变量所包含的目录下,就可以被调用了,这和一般的程序并无区别。

而elisp写就的 Emacs 软件则稍微有一些不同。你如果想在 Emacs 里面调用一个函数,你得先有这个函数的定义;为了有这个函数的定义,你必须显式地将拥有函数定义的elisp文件载入 Emacs 环境;为了将 elisp文件正确载入 Emacs , Emacs 会在load-path这个变量所包含的所有目录下寻找同名文件。所以,说到底,安装elisp软件的过程,就是将它拷贝到某一个 load-path目录下,并且在.emacs文件显式载入这个文件的过程。

一般FAQ上给出的建议,是将自己下回来的elisp包,放在某一个名叫 site-lisp的目录之中。这是个不错的建议,不过问题在于大多数Linux的发布版厂商,习惯把他们自己维护的一些elisp资源包也扔到site-lisp这个目录里面去,这造成的结果就是,有一天你突然想备份自己的Emacs资源的时候,你突然发现分不清那些是自己想要的,哪些是不小心让系统装上去的垃圾。

所以,建议你还是在自己的$HOME目录底下建一个专门给Emacs用的目录,名字嘛,可以就叫emacs。$HOME/emacs这个目录里面至少可以分出两个子目录来,一个是config,我们从此就可以把所有Emacs配置的内容放到这个目录底下,并且分门别类起来;另一个叫package,里面就可以堆放各种从网络上下载回来的elisp资源。

所有扔到site-lisp目录里面的elisp文件夹,在emacs起动的时候都会自动被加入load-path列表,这是site-lisp/subdirs.el的功劳。我们的package/subdirs.el也要有这个功能。

代码: 全选

(defun my-add-subdirs-to-load-path (dir)
 (let ((default-directory (concat dir "/")))
  (setq load-path (cons dir load-path))
  (normal-top-level-add-subdirs-to-load-path)))

(my-add-subdirs-to-load-path "~/emacs/packages")
然后在.emacs文件中显式载入这个文件。

代码: 全选

(load "~/emacs/packages/subdirs")
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#11

帖子 qinglangee » 2008-11-22 18:16

书签的操作
参考:
选项、寄存器和书签

代码: 全选

键盘输入	功能	描述
C-x r m Bookmark 	bookmark-set 	设置一个名为 Bookmark 的书签。
C-x r l 	bookmarks-bmenu-list 	列出所有已保存的书签。
	bookmark-delete 	删除一个书签。
C-x r b Bookmark 	bookmark-jump 	跳转至名为 Bookmark 的书签中所设置的位置。
未定义 	bookmark-save 	将所有的书签保存到书签文件 ~/.emac.bmk 中。
上次由 qinglangee 在 2008-11-22 22:06,总共编辑 3 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#12

帖子 qinglangee » 2008-11-22 18:17

编译整个目录下的文件
参考:
第 64 帖
1. 再emacs中编译整个目录下的.el文件输入 [Alt]-x 。 当提示输入命令时,输入
byte-force-recompile [Enter] 。
2. 如何再emacs下编译整个目录下的*.el文件两个办法,一是在dired里面用m标记,然后用B编译还有就是用emacs的批处理:

代码: 全选

emacs -batch -f batch-byte-compile *.el
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#13

帖子 qinglangee » 2008-11-22 21:57

寄存器操作
参考:
选项、寄存器和书签
1 要在一个寄存器中保存当前光标,可以运行 point-to-register 功能,它与 C-x r space 进行了绑定,同时给出寄存器的名称,它可以是任何字母数字字符。键入 C-x r space X 以便在寄存器 X 中保存光标位置。
2 使用 view-register 功能查看寄存器中的内容。键入 M-x view-register 并按 Enter。
3 要跳转至您保存在一个寄存器中的光标,或者要恢复一个窗口或框架配置,可以使用 jump-to-register 功能,它与 C-x r j 进行了绑定。

键盘输入 功能 描述
C-x r space X point-to-register 将光标保存到寄存器 X。
C-x r s X copy-to-register 将区域保存到寄存器 X。
C-x r r X copy-rectangle-to-register 将选定的矩形区块保存到寄存器 X。
未定义 view-register 查看一个给定的寄存器的内容。
C-x r j X jump-to-register 将光标移动到寄存器 X 中给定的位置。
C-x r i X insert-register 在光标处插入寄存器 X 的内容。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#14

帖子 qinglangee » 2008-11-22 21:59

用到的插件
先看10楼的subdirs.el写好

1color-theme.el 颜色主题,地球人都知道
把它的整个文件夹放到自己的插件目录里就行了
2 RedoMode实现emacs的redo功能,让它跟Windows下的类似
3 layout-restore.el实现保存emacs的窗口布局
4 tabbae.el为每个buffer分组,显示标签
上次由 qinglangee 在 2009-07-19 23:34,总共编辑 2 次。
头像
qinglangee
帖子: 137
注册时间: 2008-10-25 5:04

Re: 学习Emacs

#15

帖子 qinglangee » 2008-11-29 9:40

删除一行
emacs的删除一行是C-a C-k,而且只删内容,还留了个空行,不太方便,自己写了个删除一行的函数,绑定到C-d上,C-d一般就用Delete键,全是Windows风格 :em01

代码: 全选

;;;删除一行
(defun zl-delete-line nil
  "delete the whole line"
  (interactive)
  (beginning-of-line);光标移动到行首
  (push-mark);做个标记
  (beginning-of-line 2);移动到下一行行首
  (kill-region (point) (mark)));光标和标记之间的删掉
(global-set-key (kbd "C-d") 'zl-delete-line);删除一行
(global-set-key [delete] 'delete-char);delete 删除一个字符
上次由 qinglangee 在 2008-11-30 12:14,总共编辑 1 次。
回复