emacs学习笔记之buffer
Emacs可以有多个buffer,每个buffer都有各自的名字,它们有的与文件关联,有的不然。任意时刻,只有一个buffer是被选中的。如果emacs只有一个window,则这个window里的buffer自然就是被选中的状态。而如果有多个window,则被选中的window里的buffer为被选中。
-
创建和选择buffers
-
1
C-x b buffer RET
选择或创建一个被命名的buffer。
-
1
C-x 4 b buffer RET
类似。不过是对另外一个window操作。
-
1
C-x 5 b buffer RET
类似,不过是对另外一个frame操作。
-
1
C-x LEFT/RIGHT
选择前/后一个buffer.
-
1
C-u M-g M-g
1
C-u M-g g
读取一个数字n,在另外一个window中打开最近一个buffer的第n行。
-
-
列出存在的buffers
-
1
C-x C-b
列出存在的buffer列表。可用
只列出关联文件的buffers。1
C-u C-x C-b
-
-
其他buffer操作
-
1
C-x C-q
开关当前buffer的只读状态。
-
1
M-x rename-buffer RET name RET
重命名当前buffer。
-
1
M-x rename-uniquely
重命名当前buffer,在末尾加上
。1
<number>
-
1
M-x view-buffer RET buffer RET
在
中滚动浏览。1
buffer
会自动给当前buffer名字加上一个独特的数字使之与其他不重复。1
M-x rename-uniquely
另外,
和1
M-x append-to-buffer
可以从一个buffer复制文字到另一个buffer。1
M-x insert-buffer
-
-
清除buffer。
-
1
C-x k bufname RET
清除
这个buffer。1
bufname
-
1
M-x kill-some-buffer
逐一清除buffers。
-
1
M-x kill-matching-buffers
清除匹配正则表达式的buffers。
-
-
若干个buffers的操作
-
1
M-x buffer-menu
编辑一个列出所有buffer的buffer(听上去貌似挺拗口的呢:P)
-
1
M-x buffer-menu-other-window
见名知意。
在buffer列表允许以下的操作。
标记。
标记是指在列表中可以用以下的操作对某一个buffer进行标记,在完成所有的标记之后可以用
执行。1
x
-
1
d
标记当前buffer为待清除对象,并将光标下移一行。以后可以用
执行清除。1
x
-
1
C-d
类似,但是光标上移。
-
1
s
标记当前buffer为待保存。
-
1
x
执行所有的保存或清除的标记。
-
1
u
撤销当前的
标记。1
d
-
1
DEL
移至前一行并清除前一行的
标记。1
d
立即操作。
以下命令可以立即执行。
-
1
~
标记当前buffer为未修改过的。
-
1
%
开/关当前buffer的只读状态。
-
1
t
以tags table访问当前buffer。
-
1
q
退出当前buffer菜单(泪流满面终于知道怎么退出了T_T)。
-
1
RET
1
f
选择当前的buffer并显示。
-
1
o
类似以上,不过在另外一个window显示当前选中的buffer。
-
1
C-o
类似上,不过并不选中那个buffer(不切换过去)。
-
1
1
选中当前buffer并在一个full-frame window中显示。
-
1
2
拆分出一个window并分别显示打开buffer菜单之前的buffer的当前的buffer。
-
1
b
将当前buffer移至列表底部。
-
1
m
标记当前buffer。当执行
命令的时候再另外一个窗口中显示这些buffer。1
v
-
1
v
和已经用
标记的buffer都用各自的buffer显示。1
m
影响整个buffer列表的命令
-
1
S
根据当前光标所在的栏对buffer列表进行排序。可用数字前缀指定要排序的列。
-
1
T
开关对非文件的buffer的显示、
一般来说,buffer list并不会自动更新,可以用
来更新。1
g
-
-
-
间接buffers
间接buffer是指以其他buffer为基buffer的一种buffer。
1
M-x make-indirect-buffer RET base-buffer RET indirect-name RET
创建一个叫indirect-name的间接buffer,以base-buffer为基buffer。
1
M-x clone-indirect-buffer RET
以当前buffer为基buffer,创建一个复制的间接buffer。
1
C-x 4 c
类似上面,并且在新的窗口打开这个间接buffer并选中。
间接buffer与基buffer里的内容总是保持一致的。其中一个buffer内容的修改会直接影响另一个buffer的内容。但是除此之外,它们是两个独立的buffer,它们有不同的名字,不同的光标位置,不同的major mode的本地变量等等。
间接buffer不能访问文件,所以对间接buffer执行保存操作实际是对基buffer进行保存。清除基buffer也会清除其间接buffer,而反之则不会。
-
方便的特性和自定义buffer的操作
- 使buffer的名字惟一化
如果多个buffer访问的文件名都一样,那么buffer的名字就需要变得惟一以方便区别。emacs默认是将文件名后面加上数字(’<2>’,’<3>’)。加载
库(1
uniquify
)可以使用其他规则来定义buffer的名字。这主要是通过设置变量1
require 'uniquify
来实现的。1
uniquify-buffer-name-style
/u/rms/tmp/Makefile -> ‘tmp/Makefile’;/usr/projects/zaphod/Makefile -> ‘zaphod/Makefile’.1
forward
-
‘file1
post-forward
top1/middle1’ & ‘file top2/middle2’ -
‘file\middle1\top1’ & ‘file\midlle2\top2’1
reverse
-
使用子字符串切换buffer
__istwitch__这个minor mode允许使用子字符串来在切换buffer的时候用子字符串匹配buffer name。先用
打开buffer列表后,就可以输出子字符串进行匹配,按1
C-x b
会选中当前匹配的第一个buffer.用1
RET
和1
C-s
可以翻转当前匹配的buffer名单。1
C-r
- 自定义buffer菜单
1
M-x bs-show
显示一个类似于
的buffer列表,但是这个列表可以自定义。1
M-x list-buffers