




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习Emacs系列教程 Edit By Lzzy 目录 TOC o 1-3 h z u HYPERLINK l _Toc402365330 学习Emacs系列教程(一):基本使用 PAGEREF _Toc402365330 h 3 HYPERLINK l _Toc402365331 一、Emacs的安装和使用 PAGEREF _Toc402365331 h 3 HYPERLINK l _Toc402365332 二、Emacs按键 PAGEREF _Toc402365332 h 4 HYPERLINK l _Toc402365333 三、进入退出Emacs PAGEREF _Toc402365
2、333 h 4 HYPERLINK l _Toc402365334 学习Emacs系列教程(二):导航 PAGEREF _Toc402365334 h 5 HYPERLINK l _Toc402365335 一、基本导航 PAGEREF _Toc402365335 h 5 HYPERLINK l _Toc402365336 二、中级导航 PAGEREF _Toc402365336 h 5 HYPERLINK l _Toc402365337 三、高级导航 PAGEREF _Toc402365337 h 7 HYPERLINK l _Toc402365338 学习Emacs系列教程(三):编辑(1
3、) PAGEREF _Toc402365338 h 8 HYPERLINK l _Toc402365339 一、文件操作 PAGEREF _Toc402365339 h 9 HYPERLINK l _Toc402365340 二、输入文本 PAGEREF _Toc402365340 h 9 HYPERLINK l _Toc402365341 三、删除文本 PAGEREF _Toc402365341 h 9 HYPERLINK l _Toc402365342 四、撤销命令 PAGEREF _Toc402365342 h 10 HYPERLINK l _Toc402365343 五、一些杂项命令
4、PAGEREF _Toc402365343 h 10 HYPERLINK l _Toc402365344 学习Emacs系列教程(四):Minibuffer PAGEREF _Toc402365344 h 12 HYPERLINK l _Toc402365345 一、初识Minibuffer PAGEREF _Toc402365345 h 12 HYPERLINK l _Toc402365346 二、在Minibuffer中编辑 PAGEREF _Toc402365346 h 12 HYPERLINK l _Toc402365347 三、自动补全 PAGEREF _Toc402365347 h
5、 13 HYPERLINK l _Toc402365348 四、Minibuffer 历史 PAGEREF _Toc402365348 h 14 HYPERLINK l _Toc402365349 学习Emacs系列教程(五):编辑(2) 标记 PAGEREF _Toc402365349 h 16 HYPERLINK l _Toc402365350 一、标记和区域 PAGEREF _Toc402365350 h 16 HYPERLINK l _Toc402365351 二、标记环 PAGEREF _Toc402365351 h 17 HYPERLINK l _Toc402365352 三、非持
6、久性标记模式 PAGEREF _Toc402365352 h 18 HYPERLINK l _Toc402365353 学习Emacs系列教程(六):编辑(3) PAGEREF _Toc402365353 h 19 HYPERLINK l _Toc402365354 一、Killing PAGEREF _Toc402365354 h 19 HYPERLINK l _Toc402365355 二、Yanking PAGEREF _Toc402365355 h 20 HYPERLINK l _Toc402365356 三、快速复制 PAGEREF _Toc402365356 h 20 HYPERL
7、INK l _Toc402365357 四、CUA绑定 PAGEREF _Toc402365357 h 21 HYPERLINK l _Toc402365358 学习Emacs系列教程(七):剪切板 PAGEREF _Toc402365358 h 22 HYPERLINK l _Toc402365359 一、复制到剪切板 PAGEREF _Toc402365359 h 22 HYPERLINK l _Toc402365360 二、从剪切板中提取 PAGEREF _Toc402365360 h 23 HYPERLINK l _Toc402365361 学习Emacs系列教程(八):查找替换 PA
8、GEREF _Toc402365361 h 23 HYPERLINK l _Toc402365362 一、增量查找 PAGEREF _Toc402365362 h 24 HYPERLINK l _Toc402365363 二、简单查找 PAGEREF _Toc402365363 h 25 HYPERLINK l _Toc402365364 三、词组查找 PAGEREF _Toc402365364 h 25 HYPERLINK l _Toc402365365 四、正则查找 PAGEREF _Toc402365365 h 26 HYPERLINK l _Toc402365366 五、替换 PAGE
9、REF _Toc402365366 h 26 HYPERLINK l _Toc402365367 学习Emacs系列教程(九):缓冲管理 PAGEREF _Toc402365367 h 28 HYPERLINK l _Toc402365368 一、操作缓冲 PAGEREF _Toc402365368 h 29 HYPERLINK l _Toc402365369 二、Buffer Menu PAGEREF _Toc402365369 h 30 HYPERLINK l _Toc402365370 三、间接缓冲 PAGEREF _Toc402365370 h 30 HYPERLINK l _Toc4
10、02365371 学习Emacs系列教程(十):多窗口 PAGEREF _Toc402365371 h 31 HYPERLINK l _Toc402365372 一、显示窗口 PAGEREF _Toc402365372 h 32 HYPERLINK l _Toc402365373 二、重排窗口 PAGEREF _Toc402365373 h 32学习(xux)Emacs系列教程(一):基本使用 前言(qin yn)的前言:本人(bnrn)也是初学Emacs,之前对Vim也只接触了一点,所以也谈不上对哪个更喜欢,也分不出哪个更好。写这个教程的目的一是方便自己更好的学习Emacs,二是没事找事。如
11、果有专家路过还望多指点。前言:大名鼎鼎的Emacs,传说中程序员的终极武器,已经跨越了文本编辑器,IDE的境界,可以替代操作系统GUI的东西。怀着一种膜拜的心情我决定开始学习Emacs,期望有一天也能成为一代Emacs大侠。参考书目:1. GNU Emacs Manual (Emacs 官网有下)2. ORelly Learning GNU Emacs, 3rd Edition一、Emacs的安装和使用 学习软件的第一件事当然是把它下下来, HYPERLINK /pub/gnu/emacs/windows/emacs-24.3-bin-i386.zip /pub/gnu/emacs/windo
12、ws/emacs-24.3-bin-i386.zip 目前最新版24.3,这个版本号够吓人的,Opera的10.0还不及别人的一半。本人不幸,使用的是Windows版本。 安装过程异常简单,直接解压就行,但路径中不能包含空格,所以就不要往Program Files文件夹下面丢了,我是直接放在根目录的,找起来也方便。运行bin目录下的addpm.exe可以添加开始菜单快捷方式。也可以直接运行runemacs.exe 来启动Emacs。 卸载也很方便,Emacs不会对系统写任何垃圾东西,直接删除文件夹即可卸载,还有你的快捷方式。 启动Emacs后的界面如下: 猛的一看,没什么太出彩的地方(dfng
13、),感觉比较简陋。上面依次是标题栏、菜单栏、工具栏,中间一大块就是编辑文本的地方,下面两行是mode line 和echo area。 echo area是你输入命令(mng lng)和显示消息的地方。 在mode line中第一个字符(z f)表示字符集,c代表chinese-gbk,后面那个 符号表示换行类型,是指DOS的CRLF换行,另外还有Unix的LF换行和Mac的CR换行。然后一个字符,表示打开的文件是否可写(先称之为文件以便于理解,实际上是buffer),%表示只读,- 和 * 表示可写。再一个字符表示文件是否已写,% 或 - 表示还没动,*表示已经更改。这两个字符组合起来有四个
14、状态。符号表示%只读,未更改-可写,未更改*可写,已更改%*只读,已更改 再后面一个 - 表示路径,后面黑体的 *GNU Emacs* 表示buffer的名称。后面的All表示光标的位置,当文件在一页就能显示完的时,这里是All,此外还有Top, Bot,以及当前位置百分比。L5表示第五行。Fundamental 是模式名,模式种类很多,这个以后介绍。 如果是第一次使用,点击Emacs Tutorial,里面也有Emacs的一些基本介绍,而且是中文。二、Emacs按键(n jin) Vim 把控制和编辑分成了两个模式,单独(dnd)操作,互不影响。而Emacs是同时进行编辑和控制(kngzh)
15、,只不过控制命令需要使用控制键。 Emacs的控制键就三个Control,Shift和 Meta,Control 和 Shift 键盘上都有,Meta 在美式键盘中就是Alt,在苹果键盘上是那个很花的四个圈的键,如果键盘上没有Alt (这个要某些欧洲人才会遇到)可以使用Esc 代替,另外Esc 不像Alt 通常当组合键用,它要单独按一下,再按另外的。 以后控制命令就这样表示: C-f Ctrl+f C-M-f Ctrl+Alt+f C-_ Ctrl+Shift+- Emacs中,这些组合键其实是一些函数的快捷方式,比如C-n 是next-line的快捷方式。我们除了使用组合键以外,还可以直接调
16、用函数。按下M-x,然后输入函数名就可以调用函数了。三、进入退出Emacs进入前面已经说了,现在说怎么退出。最直接的办法,点右上角的叉,当然这个没什么技术含量。比较文明的方法,C-x C-c ,如果当前文件已经修改会问你是否保存。野蛮一点的方法,调用函数kill-emacs,即M-x kill-emacs,直接退出,不管是否修改。不过直接退出后,Emacs会在相同目录下保留一个以#号开头结尾的相同文件名文件,下次启动可以使用M-x recover-file来恢复。如果是多次保存后,还会有一个以结尾的文件,保存了上次信息。 教程的第一部分就写到这儿,虽然没有太多实际的东西,总算开了个头吧。 HY
17、PERLINK /robertzml/archive/2009/09/14/1566435.html 学习Emacs系列教程(二):导航 上回开了个头,简单的介绍了Emacs的一些基本常识,这回继续说基本常识,怎么移动你的光标。可能有人会说,这上下左右键不是很好用吗,还用你来讲。呶,Emacs的强大在于你能够只使用键盘左边那堆键来完成任何事情(不包括顶上的ESC和Function),这也是Emacs的设计宗旨。为了试验这些按键,大家在进入Emacs时选择页面中间的Emacs Tutorial,这里面可以随便乱按不用担心出什么岔子。一、基本(jbn)导航看下面(xi mian)这张图片:可以(k
18、y)这么记,p-previous,n-next,b-backward,f-forward。这里所说的字符对于E文,就是一个字母,而中文是一个汉字,其实Emacs对中文支持还是很厚道的,后面慢慢可以看出来。不过在这儿我个人感觉这个光标移动没有Vim方便,别人就HJKL,一个键就能动了,这需要两个,Ctrl 有时还觉得按着很别扭,不太和谐呀。在按C-n 时,如果越过了页尾,不像一般Windows编辑器是往下滚一行,而是往下滚半页,当前光标会置于页面中间。C-p 也是一样的。另外两个使用较多的是C-v 往下翻页,M-v 往上翻页。呃,还有一个C-l 就是把当前行提到页面中间,感觉Emacs对页面中似
19、乎情有独钟啊。二、中级导航按字符移的上节说了,然后说按单词移动:M-f 向前移动一个单词,Emacs理解的中文单词是两个标点符号之间的东西,所以中文就是移到下一个标点符号的位置。往回是M-b ,向后移动一个单词。C-a 移动到行首,C-e 移动到行尾。M-a 移动到句首,M-e 移动到句尾,在中文中一般就是跑到句号的位置,这里我不得不说一下,现在很多年轻人写文章有一个逗号到底的习惯,就只在文章最后加个句号,如果用Emacs来看你的文章,一个M-e 啥都不用干了。作为一个有一定文学素养的人,在此我严厉反对这种写文章的作风,不和谐。M- 移动到下一段, M- 移动到上一段。还有两个跑的更快的导航,
20、M- 移到文档首,这里要注意是小于符号。C-x 和 C-x ,分别是往上一页和往下一页。这里页是由分页符来控制的,在Emacs Tutorial 中是没有分页符的,所有这两个键会跑到文档头和文档尾去。例图:阴影(ynyng)处是当前光标的位置,其它箭头所指是按相应键后光标的位置。三、高级(goj)导航可以这么来看基本(jbn)导航是普通人用的,中级导航是高手采用的,高级导航是砖家、叫兽用的。M-r 移动(ydng)到页面中间行首位置,holly shit,又是页面中间,真XX阴魂不散。M-x goto-char (n),这个比较复杂,先按M-x,然后空格输goto-char回车,另外Emacs
21、有Tab键补全功能,大家可以试试,如果有多个选项会有提示,最后输入一个整数。这个东西会移动到从头数第n个字符的位置,我估计不会有人变态到能记住每个字是第几个字符。M-g M-g n,按两次M-g,不用回车,提示输入一个数字,移动到指定行n,两个M-g,也可以输M-g g 。还有一个比较罕见的,C-x C-n, 这个是设置当前列为目标列。这是什么意思呢,本来我们按C-n 和C-p 时,光标会往下或往上移一行,而列的位置就是当前光标列的位置,除非下一行列没那么多(就是字符没那么多),光标会到距当前列最近的列。而我们可以用这个组合键重新设一个目标列,这样在按C-n 和C-p 时,光标会跑到我们设的目
22、标列上。如果你不幸按了,而且又不习惯,可以使用C-u C-x C-n 来取消目标列设置。补充一点,这两个命令都是禁用命令,是Emacs考虑大家多半不会用,而且比较怪的命令,所以通常就禁用了,你不小心调出时会给出提示问你是否需要继续。就像这个样子:大家按个空格稍微试下就行了。最后还有两个重复命令:M-n, n是数字,意思是重复下个命令n次,比如M-3 C-f,就是向前移三个字符。C-u n,n还是数字,也是重复下个命令n次。 如果省略n,就是4次。按两次C-u,就是重复16次。小结:按键命令作用C-fforward-char向前一个字符C-bbackward-char向后一个字符C-pprevi
23、ous-line上移一行C-nnext-line下移一行M-fforward-word向前一个单词M-bbackward-word向后一个单词C-abeginning-of-line移到行首C-eend-of-line移到行尾M-aforward-sentence移到句首M-ebackward-sentence移到句尾M-forward-paragraph下移一段M-backward-paragraph上移一段C-vscroll-up下移一屏M-vscroll-down上移一屏C-x forward下移一页C-x backward上移一页M-end-of-buffer移到文档尾M-g g ng
24、oto-line移到第n行(none)goto-char移到第n个字符C-lrecenter将当前位置放到页面中间(Emacs最喜欢的地方)M-ndigit-argument重复下个命令n次C-u nuniversal-argument重复下个命令n次,n默认为4注:这里(zhl)命令这列就是按了M-x后输入的东西。 HYPERLINK /robertzml/archive/2009/09/23/1571942.html 学习Emacs系列教程(jiochng)(三):编辑(1) 上回说到怎么(zn me)在Emacs中移动光标,这回将介绍如何在Emacs中编辑文本。任何一款文本编辑软件的核心
25、功能当然就是编辑文本,Emacs也不例外,虽然它也有许多其它强大的本领,但都离不开文本编辑。闹,文本编辑说白了也就是打字,专业点说我们需要实现一种所见即所得输入方式。在Emacs中打字和Notepad中没什么区别,一样也是打开一个文件直接往里面敲字符就可以了,中文也行。这个和Vim区别比较大,我们还需要知道自己是在哪个模式下,不然乱敲一气也不见屏幕有什么反应。一、文件(wnjin)操作刚才(gngci)我们说到编辑文本就是打开一个文件往里面敲字符,所以我们第一件事就是打开一个文件。C-x C-f 输入这个(zh ge)命令后在命令消息显示区会看到一个提示“Find file: ”,然后是我的文
26、档的路径,这时需要输入你编辑的文件的名称。注意,这里的输入的文件名可以包含路径,比如 D:text.txt,或者是相对路径。还有就是在Windows中我们可以使用Windows风格的反斜杠,当然了也可以使用正斜杠/。如果输入了一个新的路径,Emacs的当前路径会跳转到你输入的地方,(实际上是新开了一个buffer)。如果Emacs没找到你输入的文件,它会以你输入的名字自动新建一个文件。另外Emacs还支持拖拽,就是说可以把文件图标拖到Emacs中来打开它。当你不小心错开一个文件时,可以使用C-x C-v 来换一个,操作和C-x C-f 一样,这个区别嘛是Emacs在buffer中处理有些不同。
27、C-x C-s 这个命令是用来保存文件的,另存为是C-x C-w ,这两个都比较简单,一看就会。二、输入文本除了一些基本的输入方式,Emacs还可以输入非打印字符,就是ASCII表中前面的那些字符。使用C-q (n), 这里的n代表一个八进制数,就能打出n对应的ASCII表中的符号。还有就是Unicode字符比如日文、韩文,使用C-x 8 后面接Unicode标准中字符的名字或者编码就可以输出这个乱七八糟的东西了。这我相信不会有谁闲得很,无聊来记这种一长串数字的,而且我们有更为先进的方案,(广告时间)当。当。当。,现在隆重推出Unicode字符超级输入工具搜狗软键盘,省去了你记忆一大堆16进制
28、数的烦恼,还能输入中文,实在是居家旅行必备良品。三、删除文本相比输入,Emacs删除文本的花样就比较多了。Backspace,退格键,这个比较传统就不说了。Del键,删除光标处的字符,虽然这个也很常见,但它违背了Emacs的原则,“你的手不用离开主键盘区”,所以我们用C-d来代替。M-d ,这个用来删除一个单词(记住在中文中单词表示两个相邻标点符号中的句子,所以如果你是打中文这个键还是少用,稍不留神多长一截句子就不见了)。而且它删除的是从光标当前位置到单词结束,还会把单词前半截留给你。相对应,删除单词前半截可以用,M-Backspace。M-k, 删除一段句子,这个在中英文有些不同。中文里面它
29、只会删除到句号为止,包括句号。而英文中,它不认., !,这些东西,而是把整段都给删了(英文的分段用两个回车表示)。和M-d一样,它也是从光标处开始删除。对应删除回去是C-x Backspace。C-k, 从光标起删除当前行。一个比较详细的例子见下图:(宽线覆盖的文字就是使用箭头指向的命令删除的部分,注意中英文的区别)四、撤销(chxio)命令操作难免(nnmin)有失误之处,Windows里面(lmin)Ctrl + z 命令使用频率也是蛮高的,不过在Emacs中按Ctrl + z 会发现窗口最小化了。Emacs中要达到撤销效果使用的是 C-/ ,同样还可以使用 C-_ 或者 C-x u ,这
30、三个都对应的是Undo命令。和Vim 类似,Emacs中删除的内容也保存在一个缓冲中,相当于一个剪贴板,我们可以很方便的调出某一次放进去的东西,这个地方我还没仔细看,放到以后再讲。上面说的是撤销文本上的操作,还有个比较常用的命令C-g ,这个是用来撤销命令的,当你输了一半命令发现不对就可以用它了。五、一些(yxi)杂项命令有些比较零碎的命令又比较常用(chn yn),呃,其实应该放到第一章的,先搁在这儿吧。帮助(bngzh)命令:C-h t 调出Emacs Tutorial。C-h r 调出Emacs Manual。C-h k (command) ,调出对应command的帮助,比如C-h k
31、 C-n 就是查看C-n的帮助。空白行:插入空行,C-o 。删除空行C-x C-o ,注意,如果有许多空行时,这个命令会删除的只剩一个空行,只有一个就直接删除了。这两个命令并不是完全对应,插入空行实际是插入一个回车换行符,而删除空行的标准是这一行什么文字都没有才删除了,如果我们在一行文字中间按C-o,光标后面的内容会移到下一行,再按C-x C-o 却没有反应,因为这行前面还有内容。重复命令:上章介绍两个数字参数的重复命令,这儿还有一个不带数字参数的。C-x z ,这个命令的对象是它前面输的命令,比如,先按C-n ,再按C-x z,就会重复一次C-n,然后我们每按一次 z, 就再往下走一行,相当
32、方便。小结:按键命令作用C-x C-ffind-file打开文件C-x C-vfind-alternate-file打开另一个文件C-x C-ssave-buffer保存文件C-x C-wwrite-file另存文件C-q (n)quoted-insert插入字符,n表示字符的八进制ASCII码C-x 8ucs-insert插入Unicode字符C-ddelete-char删除光标处字符Backspacedelete-backward-char删除光标前字符M-dkill-word删除光标起单词M-Backspacebackward-kill-word删除光标前单词C-kkill-line删除
33、光标起当前行M-kkill-sentence删除光标起句子C-x Backspacebackward-kill-sentence删除光标前句子(none)kill-paragraph删除光标起段落(none)backward-kill-paragraph删除光标前段落C-/ undo撤销C-_undo撤销C-x uundo撤销C-gkeyboard-quit撤销命令C-h thelp-with-tutorial调出Emacs TutorialC-h rinfo-emacs-manual调出Emacs ManualC-h k (command)describe-key查看对应command帮助C
34、-oopen-line插入空行C-x C-odelete-blank-line删除空行C-x zrepeat重复前个命令 HYPERLINK /robertzml/archive/2009/09/27/1574557.html 学习(xux)Emacs系列教程(四):Minibuffer 上回介绍(jisho)了在Emacs中如何插入删除(shnch)文本的简单操作,以及一些杂七杂八的命令,都还是比较容易的。这回先跳过编辑这部分,介绍Emacs中的Minibuffer,呃,翻译过来叫迷你缓冲,听着比较难受,后面还是用E文吧。一、初识MinibufferMinibuffer 乃是Emacs命令读
35、取复杂参数的位置。比如说文件名,缓冲名,命令名以及Lisp表达式这些东西。Minibuffer 显示在echo area中,当Minibuffer处于使用状态时,会出现一个彩色的提示符并以冒号结尾,根据提示符信息输入参数,以回车提交。取消Minibuffer 使用C-g,也就是上一节介绍的取消命令。其实Minibuffer并不是太神秘,最常见的地方就是打开文件时提示我们输入文件名:按下C-x C-f 后,回显区就会变成这个样子(yng zi),其中Find file 就是(jish)Minibuffer的提示符,因为(yn wi)它是蓝色的。后面的路径是Minibuffer自动添加的默认值,我
36、们可以把参数选项insert-default-directory设置为nil,关闭这个默认路径。这里插入一下如何设置Emacs参数选项,我们键入M-x set-variable RET insert-default-directory RET后输入nil 即可,这里的RET代表回车。改回默认,前面输入一样最后输入t 。其实我们按下M-x set-variable也激活了Minibuffer。二、在Minibuffer中编辑我们可以将Minibuffer看成和主输入区类似的缓冲,Minibuffer中也有个buffer嘛,就是说某些主输入区的命令Minibuffer也可以用。同样我们看上面那张图
37、,使用C-a 可以把光标移到d字符的位置,再按C-e 光标又回到最后,还可以使用M-Backspace删除“info/” 回到上级目录。不过需要注意的一点是,RET是Minibuffer的结束符而不是换行符,所以如果我们需要插入新行就不能使用回车,而是用C-o。同样对于TAB、SPC、?(前两个分别对应Tab键和空格键)在Minibuffer中经常用于自动补全,所以也不能直接输入,我们需要使用C-q 来插入,比如TAB,就用C-q TAB来替换。可以说Minibuffer和主输入区基本上一样,同样的快捷键、同样的操作方式,复制粘贴功能一应俱全。通常情况,Minibuffer在屏幕中只有一行,随
38、着你输入的增多,Minibuffer会自动调整大小来适应。变量 resize-mini-windows用于控制Minibuffer的大小变化,其默认值是grow-only,大小只增不减,设为t 后,如果你删除一行会自动缩小,设为nil,就不会动了。变量max-mini-window-height 控制Minibuffer高度的最大值,设为浮点数表示占整个窗口的百分比,整数表示最大可以有多少行。默认值是0.25。当我们操作Minibuffer时也可以控制另一个窗口,C-M-v 命令就是用来滚动另一个窗口的文本,这个是往下翻页,C-M-S-v 是往上翻页,大家要看清楚,这不是四个键一起按,如果你不
39、小心按的是s键,你会发现出来的是QQ聊天窗口,所以出于对中国广大QQ用户的考虑,Emacs把它改成了大写的s,就是说还要加上Shift键,呃,这是我目前见的最长的按键了而且比较变态。其实,也有简洁的方式,MUp和MDown,不过这两个键不在主键盘区,就看各位心情了。Minibuffer 一般情况是不允许递归调用的,也就是我们不能连按两次C-x C-f,它会提示Minibuffer正在使用,我们也可以设置变量enable-recursive-minibuffers 为t 来激活递归调用,不过容易引起错误,大家还是尽量避免吧。三、自动(zdng)补全Emacs中的命令有那么多,我们也不可能每一个都
40、记的住,电脑里的路径也很长,记漏几个字符也很正常,这个时候自动补全就显得(xin de)很重要了。常用的自动补全有四个键TAB、SPC、RET和?。我们先看它们(t men)的准确定义。TAB尽可能的补全Minibuffer中的字符,如果没有满足要求的,则列出所有可能的补全。对应命令minibuffer-complete。SPC最多补全Minibuffer中的一个词,如果没有满足要求的,则列出所有可能的补全,在输入路径时SPC不可用。对应命令minibuffer-complete-word。RET提交Minibuffer中的文本,或者选取第一个可能的补全提交。对应命令minibuffer-co
41、mplete-and-exit。? 列出所有可能的补全。对应命令minibuffer-completion-help。下图就是我们按ins TAB TAB后自动补全的例子:第一个TAB补全了“ert-”,第二TAB列出了所有可能的补全。再仔细解读下这几个键,TAB是用的最多的自动补全,可以说每个操作系统的shell都支持TAB自动补全,它的设计目标也是尽可能的补全我们的输入,而一次补全需要满足下面三个准则:光标前Minibuffer中的文本必须和补全候选项中开头的内容一致,如果光标后还有文本则其需为补全候补项剩下内容的字串。如果不满足上一条件,则使用部分匹配补全,即将Minibuffer中的文
42、本以-或者空格分开,分别补全。比如输入em-l-m,再按TAB,则会补全至emacs-list-mode。如果仍无满足的候选项,则继续使用第一条准则,不过忽略光标后的文本。空格键的匹配(ppi)模式与TAB类似,不过它只匹配(ppi)到下一个-或者空格(kn ),比如输入auto-f 后按空格会完成auto-fill-,需要再按一个空格才会完全补全为auto-fill-mode。此外,在TAB和SPC的匹配当中可以使用通配符*,代表任意一个或多个字符。在没有完全匹配项时,Emacs会列出所有满足条件的匹配,我们可以使用多种方法来选择某一项。Mouse-1, Mouse-2,就是鼠标左右键。或者
43、在Minibuffer中按M-v,就会切换到补全候选项窗口,然后我们可以使用RET选择光标位置的项(choose-completion)。或者使用左右箭头键移动光标(next-completion、previous-completion)。很遗憾,除了使用上下左右,没有更快的方法了,M-f 和M-b 都是移到-字符的位置。再说明一点,上面几个命令想要能用,就必须把Minibuffer递归调用打开。在我们使用RET提交输入时,会出现三种不同情况的自动补全,三种情况根据提交内容的使用情况区分。严格匹配,顾名思义,就是说输入的内容要完全匹配某一项才行。我们使用C-x k 来关闭某一个buffer时会
44、提示输入buffer名,这个时候就是使用的严格匹配。如果找不到这个buffer 命令就不会执行。谨慎匹配,这个和严格匹配类似,区别在于回车后如果没有找到一个完全匹配的项Minibuffer不会退出,而是进行自动补全,再按RET就可以提交输入,然后退出Minibuffer。谨慎匹配用在读取必须存在的文件时。宽松匹配,C-x C-f 就是典型的宽松匹配,有一致的就打开这个文件,没有一致的就新建一个文件。自动补全还有种icomplete 模式,使用M-x icomplete-mode 启动,作用是自动更新可能的补全。接下来再介绍一些自动补全的变量。completion-auto-help ,设为ni
45、l 时不会出现补全候选项列表,必须使用? 手动调出。设为lazy,在按第二次TAB时会出现补全候选项列表。completion-ignored-extensions,它的值包含了一些字符串,包含了比如.o, .elc, 之类的,这样在输入文件名自动补全时就不会选择以这些结尾的文件了,不过当所有可能的候选都在忽略后缀里面,所有忽略全部无效。比如有foo.c 和 foo.elc 两个文件,输入foo TAB,会得到foo.c,但你输入foo.e TAB 还是会出现foo.elc。此外如果它的某项值是以/ 结尾,则代表的是一个文件夹。read-file-name-completion-ignored
46、-case ,值为non-nil 表示忽略大小写,nil 为不忽略大小写。四、Minibuffer 历史(lsh)在Minibuffer中的每次输入(shr)都保存在Minibuffer的历史(lsh)当中,我们可以很方便的调出之前输入的某次命令。M-p 移到Minibuffer历史中的前一条,previous-history-element。M-n 移到Minibuffer历史中的后一条,next-history-element。M-r regexp RET 移到Minibuffer历史中的前一条,使用正则表达式,previous-matching-history-element。M-s r
47、egexp RET 移到Minibuffer历史中的后一条,使用正则表达式,next-matching-history-element。提醒一下,这些要Minibuffer处于激活状态才能使用。每次移动后取出的历史会替换当前的输入,而当我们在最后一条记录时继续使用M-n,还是会照样出现一条记录,不过这个记录是Emacs猜的。此外还需要说明的是,Emacs 维护了多个不同的历史,比如我们打开文件的路径历史,或者我们调用编译器的编译参数历史,而Emacs搜索历史也是在相应的历史列表中进行。关于Minibuffer历史的参数常用有两个,history-length 历史队列最大值,history-d
48、elete-duplicates 是否删除相同的历史。都是字面意思就不仔细说了。如果我们现在在主窗口也可以快速的调出最近执行的命令,使用C-x ESC ESC (repeat-complex-command)再执行一次最近的Minibuffer中的命令,Emacs会提示你是否执行。我们还可以使用M-p, M-n 来选择其他的历史。命令M-x list-command-history 可以列出最近所有的历史。最后说下Minibuffer历史的本质,它们都是储存在Lisp变量command-history中项,其中每一项都保存的每次执行的命令和参数。小结:这次讲的东西不少哈。按键命令作用(none
49、)set-variable设置变量C-M-vscroll-other-window向下滚动另一个窗口MDown同上同上C-M-S-vscroll-other-window-down向上滚动另一个窗口MUp同上同上TABminibuffer-complete自动补全MinibufferSPCminibuffer-complete-word自动补全Minibuffer中一个词RETminibuffer-complete-and-exit提交Minibuffer?minibuffer-completion-help列出所有可能补全RET(候选列表中)choose-completion选择候选项pre
50、vious-completion上一个候选项next-completion下一个候选项C-x kkill-buffer关闭一个buffer(none)icomplete-mode自动更新补全模式M-pprevious-history-element前一历史M-nnext-history-element后一历史M-r (regexp)previous-matching-history-element前一历史,使用正则表达式M-s (regexp)next-matching-history-element后一历史,使用正则表达式C-x ESC ESCrepeat-complex-command重复
51、最近一次命令(none)list-command-history列出所有命令历史 变量作用insert-default-history打开文件是否插入默认路径resize-mini-windowMinibuffer大小变化模式max-mini-window-heightMinibuffer最大高度enable-recursive-minibuffers是否允许Minibuffer递归调用completion-auto-help自动补全帮助模式completion-ignored-extensions自动补全忽略后缀名列表read-file-name-completion-ignored-cas
52、e自动补全是否大小写敏感history-length自动补全历史长度history-delete-duplicates自动补全是否删除重复项PS:文中出现的高亮文本含义,红色(hngs)为快捷键,前几章也是这么用的;绿色为命令,即按M-x 后输入(shr)的内容;蓝色为Emacs的变量名。 HYPERLINK /robertzml/archive/2010/02/15/1668592.html 学习Emacs系列(xli)教程(五):编辑(2) 标记 有段时间没写这个教程了,自己险些放弃,不过(bgu)回头想想看个小说都讨厌太监,自己写就更不能太监,还是要坚持下去。闲话(xinhu)不多说,进
53、入这次的正题,关于编辑文本的另一些内容。一、标记和区域所谓区域(region)就是平时我们使用鼠标选中的一段文字,在emacs中用样可以使用鼠标来选择一段文字表示区域,如果使用键盘操作的话需要用一个术语叫标记(mark),也就是一个基准点,或者说是区域的起点,使用命令C-SPC 用来设定标记,不幸的是这个组合键通常情况是被输入法给截获了,我们得使用C-来代替,要多按个Shift,操作起来感觉有点别扭。OK,在设定好标记后我们可以让光标移动到任何想去的地方,在光标和标记之间就是选定的区域,emacs里面会高亮显示这个区域,参见下图,注意,这个区域是动态存在的,只要光标位置变了,区域也随着变化,只
54、是其起点永远是那个标记。这个时候就可以对选中的区域进行操作了,比如说C-w (kill-region) 删除选中的区域,或者C-x C-u 将所选区域字母改成大写字母,这是个禁用命令需要确认后才能生效。还有个常用的操作是C-x C-x (exchange-point-and-mark),交换光标和标记,就是说把区域的起点改在光标所在处。取消标记和区域直接使用C-g 就可以了。除了这种手工选择区域之外,emacs还内置了一些快捷的选取方式。像常用的全选就是C-x h ,全选后标记在文档的最后,而光标在文档的最前面。C-x C-p 选择整页,页是由分页符界定的。选取一段使用M-h 。M- 从当前位
55、置选到单词尾(中文里的单词是两个标点符号间的文字),重复按这个命令会一直往后选取单词。这四个命令有个共同的特点就是选取的区域标记在最后,光标在最前,这个和常规理解有些区别,记住就是了。在Emacs 23之后还有个新特性叫shift选择(shift selection),顾名思义就是用shift键来快速选择区域,通过使用shift键和C-n, C-p之类的组合来选择区域,和常规选择有些区别的是,在shift选择过程中使用了任何非shift组合都会取消当前选择区域。二、标记(bioj)环标记的一个主要功能是界定(ji dn)区域,此外还有一个作用(zuyng)就是记忆一个点供今后使用,在一个buf
56、fer里面可以用标记记忆16个点,称为“标记环”,标记环实际是个先进先出的队列。我们使用命令C- C- 把一个标记加入标记环,这个命令做了两件事,第一次按C-时标记了一个点(此时已经加入标记环了),第二次按C-时取消了当前标记的激活状态,我们可以在minibuffer中看到提示Mark deactivated。而命令C-u C- 来选择上一个加入标记环的标记,如果选中的标记处于激活状态,它会取消其激活。使用C-u C-不会删除标记,仅是在标记环中不停的向前跳跃,注意这里我们只可能在当前buffer中的标记间跳跃,不会跑到其它的buffer里面去。如果修改变量set-mark-command-r
57、epeat-pop 为 non-nil,在按下C-u C-后,我们可以就使用C-在标记环中跳跃了。变量mark-ring-max 表示了一个buffer中标记环中的最大标记数,默认为16。还有变量mark-even-if-nonactive 和标记环相关,当其为nil 时,表示只能使用激活状态的标记,默认为non-nil 。另外在emacs中还存在一个全局标记环,C- C-在把标记加入当前buffer标记环同时,也把标记加入了全局标记环,我们可以用命令C-x C- (pop-global-mark)在全局标记环中选择。 三、非持久性标记模式这个东西这里只是稍微提及一下,平时用到的地方很少,所谓
58、非持久性标记就是指我们在选择了一个区域后,任何修改该区域的操作都会改变区域的激活状态。而我们可以将非持久性标记模式关闭,这样选择的区域永远处于激活状态,命令是transient-mark-mode ,这是个切换变量只有开启和关闭两个状态,我们每次使用M-x transient-mark-mode命令都会将其值从一个切换到另一个。关闭该模式后最显著的特点是选择区域时没有高亮(不过使用鼠标选择和shift选择高亮还是有的)。令人头疼的也是这个特点,我们根本不知道自己选择了哪些地方。我们会使用这个东西只有一种情况,某些命令在关闭非持久性标记模式时,其作用有少许差异,不过基本上这些差异很少去关注,所以
59、这段大家看看就行。小结: 按键命令作用C- or C-SPCset-mark-command设定标记C-x C-xexchange-point-and-mark交换标记和光标位置C-wkill-region删除区域中内容C-x C-uupcase-region将区域中字母改为大写C-x hmark-whole-buffer全选C-x C-pmark选取一页M-hmark-paragraph选取一段M-mark-word选取一个单词C- C-加入点到标记环C-u C-在标记环中跳跃C-x C-pop-global-mark在全局标记环中跳跃(none)transient-mark-mode非持久
60、化标记模式 变量作用set-mark-command-repeat-pop是否使用C-连续跳跃mark-ring-max标记环最大容量mark-even-if-nonactive是否只使用激活状态标记 HYPERLINK /robertzml/archive/2010/02/19/1669204.html 学习Emacs系列(xli)教程(六):编辑(3) 这次(zh c)介绍编辑中关于粘贴复制的部分,不过在Emacs中称粘贴(zhnti)复制为Killing和Yanking,而不是通常说的Cutting和Pasting,当然差别不会太多。一、KillingKilling就是指删除指定的一段内
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB31/T 1199-2019湿垃圾资源化利用技术要求餐厨有机废弃物制备土壤调理剂
- DB31/T 1112-2018绿色展览会运营导则
- DB31/ 506-2020集成电路晶圆制造单位产品能源消耗限额
- 编织工艺品的供应链可持续发展考核试卷
- 学习型组织与领导科学的关系试题及答案
- 现代化工厂PLC控制系统集成及节能改造协议
- 海外务工人员意外伤害医疗保险代理协议
- 美容美发店员工培训与职业发展合同
- 网红奶茶品牌区域代理权转让协议
- 计算机四级安全策略试题及答案
- 文艺复兴时期的北方画派课件
- 起重吊装与履带起重机的安全使用课件
- 弱电施工手册
- 人力资源管理师二级理论知识要点
- 科研成果研制任务书
- 高分子材料完整版课件
- 完整版:美制螺纹尺寸对照表(牙数、牙高、螺距、小径、中径外径、钻孔)
- 篮球比赛记录表(上下半场)
- 2022年商务标技术标最全投标文件模板
- TFDS系统介绍(济南)
- 市政道路综合整治工程施工部署方案
评论
0/150
提交评论