Emacs入门教程(4)

Eamcs只能完成跟Notepad一样的功能吗?答案显然是否定的,今天我们一起来看看Emacs中的Buffer和Window是怎么用的。

首先还是现来了解一下什么是Emacs中的缓冲区(Buffer)和窗口(Window)。

Buffer:在Emacs中编辑的每个一文档,或每一个信息存放的空间都构成一个Buffer。

Window:在一个Emacs运行时的界面(一个Frame)中,可以划分成多个隔开的区域,每一个区域称为一个Window。如果在图形界 面下运行多个Emacs的实例,则每一个实例对应一个Frame。在不同的Window中,可以显示相同或者不同的Buffer的内容。

在刚启动Emacs时,Emacs己经为您建立了一个名为*scratch*的Buffer,用于进行随意的文本输入(它其实还有ELisp演 算的功能的,这个后面再说)。后面每当您用C-x C-f新建或打开一个文件时,Emacs都会新建一个Buffer,名字就是你文件的名字,并且在当前的Window中进行显示。如果是新建文 件,Buffer就是空的,如果是打开文件,就会把文件的内容读入,放在Buffer中。所以如果你在编辑一个文件,在你存盘之前,其实你是在修改 Buffer中数据,而并没有在修改实际的文件。

现在您可以试一下,先打开或创建几个文件,这时当前应该显示在最后一个文件对应的Buffer中。按动键盘上的C-x C-b,这时您会发现Emacs的屏幕被分成了上下两部分,这两个部分也就是Emacs中的所谓的Window了。

观察一下下面的那个窗口,可以看到,它的名字是*Buffer List*,窗口的内容就是列出了当前所有的Buffer。我们先不介绍这个Buffer List的使用的方法,我们先介绍窗口的基本操作:

C-x o:把光标在屏幕上的窗口间进行切换。记忆方法:其它(Other)窗口。

C-x 1:把当前光标所在的窗口放到最大,隐藏其它所有的窗口。记忆方法:只剩一(1)个。

现在您可以按几次C-x o看看光标是不是可以在上下两个窗口间跳动,玩够了就再让光标停到先前的窗口中,按C-x 1,这时Buffer List窗口应该被隐藏了起来,这时如果你再试图用C-x o来切换窗口就不管用了,因为屏幕上只有这一个窗口了。

那怎么切换显示隐藏的窗口呢?其实这个说法本身就不是很准确,在Emacs中只有显示出来了,才叫窗口,如果没有显示出来,而数据还存在,这时它只能称为是一个Buffer。

切换Buffer的快捷键是C-x b,可不要跟列出Buffer列表的快捷键搞混了。按下C-x b后,Emacs会在Mini-buffer中提示输入要切换到的Buffer的名字,对于文件来说,这个Buffer的名字通常就是文件名了,对于没有 关联到文件的Buffer,它们也有自己的名字,比如*scratch*,*Buffer List*之类这些都是。如果不输入Buffer名字直接回车,就会打开上一次访问的Buffer,所以反复按C-x b加上回车,就可以在最近工作过的两上Buffer间切换,非常方便。同理,在输入Buffer名字的时候,同样可以用Tab键进行自动补齐。

如果只会新打开文件创建新的Buffer,而不会把它们关闭,这显然是不行的,Buffer会越来越多。要关闭一个不需要的Buffer,所要 做的就是先切换到这个Buffer,然后按动C-x k,加上回车。或者直接按C-x k再输入Buffer名字后回车,效果都是一样的。在关闭Buffer的时候,如果Buffer中的内容没有保存,Emacs会提示你是否真的要关闭。

讲了不少,还没有讲到一开始按C-x C-b看到Buffer List的用法,其实如果不是要批量处理Buffer,比如一次关闭很多Buffer的话,我觉得Buffer List用处并不是很大,所以这部分功能就留待大家自己去琢磨了,其实在后面讲到对列表型的窗口的操作的时候,这个Buffer List的操作方法也就显而易见了。

有些朋友到现在为止可能已经开始被复杂的快捷键搞晕头了,不要怕,多用用也就熟悉了。另外,其实Emacs所有的快捷键都是可以自由定制的,随着你对Emacs的不断熟悉,你很快就可以找到一套最适合你自己使用的快捷键方案,到时我会介绍如何进行这样的定制。

Emacs入门教程(4)》上有15条评论

  1. 我先前用VIM,在图书馆翻到一本EMACS的书,觉得不错,就装上,教程写的很详细,赞一下

  2. hello 我想问一下,我启动emacs时它分上下两个部分,也就是说两个buffer吧,上面一个就是打开文件的名字,下面的是“GNU Emacs”。如果想启动emacs时只有上面的部分,没有下面的部分该怎么办呢?谢谢! 我的邮件是songquan007@gmail.com

  3. @楼上
    正常情况下Emacs启动后应该就只有一个buffer呀,不知道您遇到了什么
    情况。不过应该都可以用C-x 1放大当前buffer到全屏。
    您可以考虑截个屏发给我看看是什么情况。

  4. 想和你交个朋友,但我的计算机知识有限,不能找到你的联系方式,希望你看到我的留言后能加我QQ,754136505.愿意成为你生活和计算机方面的好友!

    • 抱歉,不用群,不清楚……
      如果有问题可以先搜索答案,如果找不到答案,可以到邮件列表提问。

  5. 弱弱的问问,我在用emacs写c语言,能不能设置一下,让emacs启动的时候同时打开两个buffer,因为我想用一个buffer来编辑我的c程序,而另一个buffer显示的是linux 的终端,并且终端在c程序所在的目录,因为我想编辑好程序后c程序后,切换到终端来编译程序并运行

    • 这样操作起来会方便吗?

      可以在.emacs中放下面代码实现(菜鸟涂鸦版,因为我也不会写ELisp):
      (shell)
      (split-window-below)
      (find-file “/tmp/stub.c”)
      (c-mode)

      我建议如果需要保留工作区状态,可以用desktop组件,比启动时开两个buffer要好用。
      ;; Save desktop
      (require ‘desktop)
      (desktop-save-mode 1)

  6. Pingback引用通告: Emacs下载与学习 | hskのblog

回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据