# 2.5.1 缓冲区变量

缓冲区（buffer）是一个 lisp 对象。这个对象中包含了将要被编辑的文本。绝大多数的缓冲区中的内容来自硬盘中的文件，因此可以被编辑。不过也有一些缓冲区另有他用。绝大多数的缓冲区对用户而言都是可见的，因此有时它们可以放在一个窗口中。不过这并不是必要的，缓冲区不需要一定被用户看到。每个缓冲区都有一个特定的位置，这个位置称为编辑点（point）；大多数的编辑命令，都是作用在当前缓冲区编辑点的附近的。不管任何时候，有且只有一个缓冲区称为当前缓冲区。

缓冲区的内容大多情况看起来都很像一个字符串，不过，这些字符串和 Emacs Lisp 中的字符串的用法可不一样。而且不同的缓冲区中，允许的操作也是可能不同的。举个例子，你可以像很高效地在当前缓冲区中插入文字，修改缓冲区的内容。当你插入一个字符串后，Emacs 会将其作为自字符串和原字符串拼接，并返回一整个新的字符串作为结果，展示在缓冲区内。

Emacs 中有很多标准函数，用来修改，测试当前缓冲区内的字符。本文档中有一整章的篇幅来描述这些函数。（详情查阅 文本章）

每个缓冲区变量都有几个关联的数据结构：

* 一个局部语法表
* 一个局部的按键映射
* 一个缓冲区局部变量绑定的列表
* 重载
* 缓冲区中的文本的文本属性

局部按键绑定和局部变量绑定列表中包含许多个性化的，对全局变量的重写。这些变量一般用来自定义不同缓冲区中的不同表现。也就是说，通过重载这些变量，来修改程序（Emcas）的行为，而不需要触及程序的源码。

此外，缓冲区也可以是间接的。这意味着，这个缓冲区和另一个缓冲区共享文本，但是以不同的方式显示这些文本。详情查阅 简介缓冲区章节。

缓冲区没有读取语法，它们以哈希表示打印，其中包含这个缓冲区的名称。

```
(current-buffer)
    => #<buffer objects.texi>
```
