Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1345781
  • 博文数量: 206
  • 博客积分: 10571
  • 博客等级: 上将
  • 技术积分: 2610
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-30 11:50
文章分类
文章存档

2014年(1)

2013年(4)

2012年(18)

2010年(14)

2009年(31)

2008年(3)

2007年(135)

分类: LINUX

2007-04-30 16:49:19

Emacs 编辑器完全介绍(3)

 

 

使用 Wiki

Wiki vs. HTML

你是否经常需要写一些笔记,这些笔记之间有一定的相互关系,你希望能够从一个主题能够很快的浏览到另一个主题,就像点击网页上的连接。

你可以把你的笔记写成 HTML,但是这样做会使你自己的阅读依赖于浏览器,你在编辑器里写好 HTML,然后却在浏览器里看这个笔记,这使得你的思路混乱。如果直接在编辑器里看,你看到一大堆


这是不能忍受的!

而且在 HTML 里加入新的结点不是一个小工作,如果你用一个普通的文本编辑器,你需要拷贝一个模板,写好内容,然后在需要连接它的网页里写上:

我的下一个主题

如果你在一个 WYGIWYS 的网页编辑环境,你需要点击一个加入连接的按钮,选择一个名字,然后开始编辑新的网页。似乎工作不是很多?但是你有很多主意的时候,这么多步骤是难以忍受的!

而且你写好的东西很不容易管理。你不容易在主题之间浏览,不容易找到所有连接到这个主题的主题(backref)。这个时候, Wiki 标记 ()就是一个很好的选择。它的标记就是非常简单的文本,一点也不影响阅读。

你可以看看,我编辑这个文本时看起来就是这个样子:

 

在绿色的文字上回车,就可以直接连接到我想看的目标。

怎样使用 Wiki?

使用 Wiki 最方便的办法就是使用 emacs-wiki, 你不但可以方便的制造,浏览,编辑 Wiki,而且可以自动转换为 HTML,自动生成目录,索引。你甚至可以在你的 Wiki 文件里插入任意的 elisp,可以进行几乎任何操作,包括把你的 Wiki 通过 ftp 传到 Wiki 发布站点。

更多的信息请看


Emacs 绑定键盘的技巧

万无一失的绑定方法

很多人绑定一些比较特殊的键的时候,都搞不清楚在

(global-set-key ... 'my-funtion)

里写些什么。特别是在 xterm 里的时候就更不知所措了。其实有一个万无一失的办法保证你一定写对。这个办法就是:

1.     M-x global-set-key RET 交互式的绑定你的键。

2.     C-x Esc Esc 调出上一条复杂命令

好了,你现在就能在 minibuffer 里看到你应该写在 .emacs 的东西了。

如果你还是失败了……

如果你在第1步的时候发现 Emacs 根本对你的按键没有反应,那么应该怀疑是你的窗口管理器拦截了这个按键。比如,我的 FVWM 设置把 C-f3 设定成了打开一个 FvwmCommand, 所以 Emacs 接收不到这个按键。如果我要绑定一个函数到 C-f3, 我必须让 FVWM 放过 C-f3

绑定新的前缀键

其实上面的办法只能让你绑定一个已有的前缀。你有可能想绑定一个 save-buffer "C-c C-w C-b a"。上面的办法就不灵了。我们必须使用另外的办法:

(global-set-key (kbd "C-c C-w C-b a") 'save-buffer)

一点解释

上面的那个 "C-c C-w C-b a" 是自动把 "C-c C-w", "C-c C-w C-b" 都定义成了一个 prefix-command. 你可以这样看到它们:

1.     C-h C-b 显示绑定

2.     C-x o 切换到显示绑定的窗口

3.     C-x C-q 消除这个窗口的只读属性

4.     M-x delete-non-matching-lines RET prefix RET 删除所有不含 "prefix" 字样的行。

现在你清楚的看到了 "C-c C-w", "C-c C-w C-b" 都是 prefix command 吧?

创建新的 prefix command

上面这个办法只对开头的键已经是 prefix command 的键序列起作用,如果你的第一个键不是一个 prefix,那么就会出错。你可以试试:

(global-set-key (kbd "C-z C-c C-w b") 'find-file)

出现错误:(error "Key sequence C-z C-c C-w b uses invalid prefix characters")

所以你必须事先把第一个键设定为 prefix:

(define-prefix-command 'ctl-z-map)

(global-set-key (kbd "C-z") 'ctl-z-map)

然后再用

(global-set-key (kbd "C-z C-c C-w b") 'find-file)

就行了。"C-z C-c" "C-z C-c C-w" 都会自动被定义为 prefix command.

绑定中文命令

现在我举一个例子来说明 prefix command 是如何工作的。我们可以把中文的 存盘 两个字绑定到save-buffer. 这样你用中文输入法敲入“存盘”两个字时,就可以把当前 buffer 保存起来。

(define-prefix-command '-map)

(global-set-key (kbd "") '-map)

(define-key -map (kbd "") 'save-buffer)

有趣吧?你可以猜到这里面是怎么回事吧?太简单了是不是?当你输入“存”的时候,看到 minibuffer 是这样:

 

这是因为我们把“存”这个字绑定到了 -map 这个 prefix-command. 当读到“存”的时候,Emacs 就会等待下一条命令,这个命令是定义在 -map 这个 map 里的。它读到“盘”,就会执行 save-buffer 了。

不过注意,你真的要在文档里输入“存盘”两个字就得先打 C-q 了。刚才我就打了好多次 C-q,真累啊。还是用一些不常用的词组比较好,或者加一个 ctrl 什么的前缀,就像这个,"C-z 存盘"

(define-prefix-command 'ctl-z-map)

(global-set-key (kbd "C-z") 'ctl-z-map)

(define-key ctl-z-map (kbd "存盘") 'save-buffer)

看我们更 bt 一点:

(define-prefix-command 'ctl-z-map)

(global-set-key (kbd "C-z") 'ctl-z-map)

(define-key ctl-z-map (kbd "给我存盘啦!") 'save-buffer)

嗨哟!yes sir!!

define-key 会自动建立很多 prefix command. 不过自己显式用 define-prefix-command 定义前缀命令有一个好处,就是你可以在你的 prefix 里再方便的定义更多的命令,而不用把整个前缀都写一遍。

(define-prefix-command 'ctl-z-map)

(define-prefix-command '-map)

(define-prefix-command '-map)

 

(global-set-key (kbd "C-z") 'ctl-z-map)

(define-key ctl-z-map (kbd "") '-map)

(define-key -map (kbd "") '-map)

 

(define-key -map (kbd "") 'save-buffer)

(define-key -map (kbd "") 'write-file)

(define-key -map (kbd "退出")

  (lambda ()

    (interactive)

    (save-buffer)

    (kill-emacs)))

这样,到了“C-z 存盘-” 这个时候,我们定义了3个分支:

  • “C-z 存盘!,表示保存这个文件;
  • “C-z 存盘到,表示保存到另一个文件;
  • “C-z 存盘退出,这个不用解释了吧。

自定义 prefix command 的另外一个更大的好处就是:你可以修改最上层对 prefix command 的绑定,从而修改许多键的绑定。比如,我们可以把 “存盘” 轻而易举的改成 “保存”:

(define-key ctl-z-map (kbd "保存") '-map)

这样一来, “C-z 保存!” ,“C-z 保存到” , “C-z 保存退出” 就分别有了 “C-z 存盘!” , “C-z 存盘到” 和 “C-z 存盘退出” 的含义了。


阅读(862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~