这些命令通常有用,但不如你已经学过的那些命令使用的频繁。你已经见过了它们中的两个:文件命令C-x C-f 用于查找和C-x C-s用于保存。
另一个例子是结束Emacs的命令C-x C-c(不必担心你所作的改动会丢失,在退出Emacs 之前,C-x C-c会提示你保存每一个改动过的文件)。
C-z命令用于*临时*退出Emacs,所以你能回到原来运行的Emacs里。在允许这样做的系统上,C-z把Emacs“挂起”;就是说回到外壳(shell)下,但并不破坏运行的Emacs。在大多数外壳上,你能用‘fg’命令或‘%emacs’来继续Emacs。
在不支持挂起的系统上,C-z建立一个子外壳(subshell)运行于Emacs下以使你能运行其他程序然后回到Emacs;这并不是真 正的“退出”Emacs。在这种情况下,通常从子外壳回到Emacs的外壳命令是‘exit’。 有很多C-x 命令,这是已学过的一个列表:
C-x C-f 查找文件
C-x C-s 保存文件
C-x C-b 缓冲列表
C-x C-c 退出Emacs
C-x u 撤销操作
被称作扩展命令的命令的使用频率都不太高。或者是只在某些模式下使用。一个例子是替换字符串的命令,它在全文里把字符串替换为其他的。当你 键入M-x, Emacs会在屏幕的底部提示你输入命令;在这种情况下,是“replace-string”。比如输入“repl s”, Emacs会把命令补全。用来结束命令。
替换字符串命令要求两个参数–要被替换的字符串和用来替换的字符串。你必须用 来结束两个参数。
>> 把光标移上两行,然后输入M-x repl schangedaltered 。 注意现在这一行改变了:你把光标初始位置后的所有单词c-h-a-n-g-e-d替换为了 “altered”
*** 自动保存(AUTO S***E)
------------------------------------
**
当你改动了一个文件还未存盘的话,所作的改动也许会由于系统崩溃而丢失。为防止这种情况发生,Emacs在编辑时为每个文件提供了“自动保 存(auto save)”。自动保存的文件的文件名前后都有一个#号;例如,如果你编辑的文件名叫“hello.c”,自动保存的文件的文件名就叫 “#hello.c#”。当你正常的保存了文件后,Emacs会删除这个自动保存的文件。如果遇到死机,你能打开那个文件后按M-x recover file来恢复你的编辑,(是你编辑的文件而不是自动保存的文件)。当提示确认时,输入yes 来继续恢复自动保存的数据。
*** 回显区域(ECHO AREA)
------------------------------------
**
如果Emacs发现你输入命令的速度很慢的话它会在屏幕底部为你显示出来,这个区域叫 “回显区域”。
*** 模式行(MODE LINE)
---------------------------------
**
回显区域上面的一行称为“模式行(mode line)”。模式行显示与下面类似的东西:
–**-Emacs: TUTORIAL (Fundamental)–L670–58%----------------
这一行给出了有关你在编辑的文件和Emacs状态的有用信息。
你已经知道了文件名意味着什么。–NN%–指出你现在在文本里的位置;它意味着上面还有NN%的文本。如果是在文件的开头,会用 --Top-- 来代替–0%–。如果是在行的末尾,会显示–Bot–。如果你正在看的文本内容很少,可以全部显示在屏幕上,模式行会说 --All–。
前面的星号表示你已经改动过文本了。一旦你保存了文件或打开了一个新文件,模式行的这部分就不是星号而是破折号了。
模式行上括号里的部分是现在的编辑模式。现在是缺省的基本(Fundamental)模式。它是 “主模式(major mode)”的一种。
Emacs有很多不同的主模式。有些意味着不同的语言或不同的文本。如Lisp模式(Lisp mode),文本模式(text mode)等等。在任何时候有且只能有一种主模式被激活。并且它的名字会出现在现在显示“Fundamental”的位置上。
每一个主模式都有些自己的命令。就象不同的编程语言的注释看起来不同一样。每种主模式插入的注释也不同。可以用扩展命令切换进某种主模式。例如,M-x fundamental-mode 是切换进基本模式。
>> 输入 M-x text-mode
不必担心,没有命令会给Emacs带来很大改变。但是你可以看到现在M-f和M-b把省略号当作单词的一部分。而先前,在基本模式里,M-f 和M-b把省略号当成当成分隔符。
主模式通常作诸如此类微小的变化:大多数命令在每个主模式里作“同样的工作”,但又有些微小的不同。
要观看关于你现在的主模式的文档,按C-h m。
>> 键入C-u C-v一次和多次使本行接近屏幕的顶端。
>> 输入C-h m ,看看文本模式和基本模式有些什么不同。
>> 按C-x 1 从屏幕上关掉这个文档。
主模式之所以叫做主模式是因为也存在从模式,从模式与主模式完全不同。每个从模式可以自己打开或者关闭,独立于所有其他从模式,也独立于你的主模式。所以你可以不用从模式或者同时用很多种从模式。
有一种从模式很有用,特别是在编辑英文文本时。它是自动填充模式(auto fill mode)。当这个模式打开的时候,当输入的文本过宽的时候就会自动折行。
你能用M-x auto-fill-mode来打开自动填充模式。如果此模式已经打开M-x auto- fill-mode则把它关闭。我们把这叫做切换开关。
>> 输入M-x auto-fill-mode。然后插入一些“asdf”直到看到这行被分为两行。你必须在中间放一些空格,只有到空格的时候才会换行。
通常边界宽度是70,但你能用带数字参数的C-x f 命令来改变它。
>> 键入带参数20的C-x。(C-u 20 C-x f) 然后输入一些文本看现在每行只有20个字符了。然后用C-x f把它改回70。
如果你在一个段落的中间产生了改变,自动填充模式将不会重新填充。要想重新填充段落,当光标在段落里的时候按M-q。
>> 把光标移到上一段按 M-q。
*** 搜索(SEARCHING)
-----------------------------
**
Emacs 能朝前和朝后搜索字符串(指相邻的一些字符或单词)。搜索是一个移动光标的操作,它把光标移动到字符串出现的下一个地方。
Emacs 的搜索命令和其他大多数编辑器不同,它是“增量式(incremental)”的,这意味着搜索在你键入字符串时就开始了。
开始一个向前搜索的命令是C-s,C-r是往回搜索。但等等,先别忙。
当你输入C-s是你将注意到在回显区域会出现一个字符串“I-search”。这告诉你Emacs开始了一个增量搜索,并在等待你输入要搜索的东西。结束查询。
>> 现在键入C-s开始一个搜索。慢慢的输入单词‘cousor’,在输入每一个字母的时候停顿一 下,注意看光标发生了什么。
>> 再输入一次C-s,来搜索“cursor”出现的下一个地方。
>> 现在输入四次看看光标移到了哪里。
>> 输入结束搜索。
看到发生什么了吗?在Emacs的增量搜索里,你输入多少字符串它就试着搜索这些字符出现的地方。到字符串出现的下一个地方,只须再按一次 C-s。要搜索的字符串不存在的话,Emacs 会发出蜂鸣并告诉你当前的搜索“失败(failing)”,按 C-g 也是终止搜索。
注意:在某些系统上,输入 C-s 会把屏幕冻结住使你从Emacs看不到更多的输出。这 表示这个操作系统的“特性”叫做“控制流程”,它拦截了C-s不让它到达Emacs那里。 要使屏幕解冻,输入C-q,然后看Emacs手册里的“Spontaneous Entry to Incremental Search”一节,按上面的建议来对付这种“特性”。
如果你在搜索的过程里按了,你将注意到要搜索的字符串的最后一个字符会被删除并且光标会回到上一个被搜索到的 地方。比如,假设你键入了“c”,将会搜索“c”第一次出现的地方。然后如果你键入“u”,光标将移到“ cu”第一次出现的地方。现在键入。这将从搜索的字符串里把“u”删掉,这时光标回到“c”第一次出现的地方。
如果你在搜索时按了Control或meta键加字符(少数几个少数命令例外,如C-s和C-r),搜索将被终止。
C-s向当前光标的后面搜索字符串出现的地方。如果你需要搜索前面文本里的东西,用C-r来代替。我们所介绍的C-s的每个特性C-r也支持,除了方向相反。
*** 多窗口(MULTIPLE WINDOWS)
------------------------------------------------
**
Emacs有一个非常好的特性是能同时在屏幕上显示不止一个的窗口。
>> 把光标移到本行上按C-u 0 C-l。
>> 现在按C-x 2,它把屏幕分裂成两个窗口,每个窗口都显示本教程。光标在上面的窗口里。
>> 按C-M-v 滚动到下面的窗口里。(如果你没有一个真正的Meta键,那么按ESC C-v)
>> 按 C-x o (“o” 指 “其他(other)”) 把光标移到到下面的窗口里。
>> 用 C-v 和 M-v 滚动下面窗口里的文本。 在上面的窗口里看本教程。
>> 再次按 C-x o 使光标回到上面的窗口里。 现在光标象以前一样在上面的窗口里了。
你能一直用C-x o在窗口间切换。每个窗口都有它自己的光标位置,但仅有一个窗口能显示活动的光标。所有的编辑命令都发生在那个显示光标的窗口上。我们把这个窗口叫做“选中窗口( selected window)”。
当你在一个窗口里编辑文本,而用另一个窗口作参考时命令C-M-v非常有用。你总是能把光标留在所编辑的地方,而用C-M-v来翻阅另一窗口。
C-M-v 是 CONTROL-META 加字符的一个例子。 如果你有一个真正的META 键,你能同时按住 CTRL 和 META 再按“v”来输入C-M-v。CTRL 和 META 谁先按谁后按无所谓。
如果你没有一个真正的META 键, 你可以用 ESC 来代替。这时候次序是有关系的: 你必须让 ESC 跟在 CTRL-v后面; 否则 CTRL-ESC v 将不工作。 这是因为 ESC 是一个有意义的字符而不是一个修饰字符。
>> 输入 C-x 1 (在上面的窗口里) 以消除下面的窗口。
(如果你在下面的窗口里键入C-x 1,将会把上面的窗口去掉。可以把这个命令看作是“只保留你现在在的那个窗口。)
你不必一定要在两个窗口里显示同样的缓冲。如果你在一个窗口里键入C-x C-f查找文件,另一个窗口的内容不会改变。你能独立的在每个窗口里查找文件。
这是让两个窗口显示不同内容的另一种方法:
>> 在你输入的文件名后再输入C-x 4 C-f,然后用结束。会看到指定的文件出现在下面 的窗口里。光标也在那里面。
>> 键入C-x o 回到上面的窗口,然后输入C-x 1删掉下面的窗口。
*** 递归编辑层(RECURSIVE EDITING LEVELS)
----------------------------------------------------------------
**
有时候你会进入“递归编辑层(recursive editing level)”。由模式行上的方括号指示。它在主模式名的括号外面。例如你也许会看到(Fundamental)变成了[(Fundamental)]。
要退出递归编辑层,按ESC ESC ESC。这是一个通用的退出命令,你也可以用它除去额外的窗口,或者退出微型缓冲。
>> 输入 M-x 进入一个微型缓冲; 然后用 ESC ESC ESC 离开。
你不能用C-g来退出递归编辑层。这是因为C-g只能取消在递归编辑层里面的命令。
*** 获取更多的帮助(GETTING MORE HELP)
--------------------------------------------------------------
**
在本教程里我们试着为你开始使用Emacs提供了足够多的信息。但是有关Emacs的信息实在是太多以至于不能全部都在这里说明。但是,你 还应该学习更多有关Emacs的东西,因为它另外还有很多有用的特性。Emacs提供了很多读取有关命令的文档的命令。这些“帮助”命令都以 Control-h开头,叫做“帮助字符”。
为了使用帮助特性,输入字符C-h,然后再输入一个字符来说明你需要哪种帮助。如果你真的不知道,输入C-h ? 然后 Emacs会告诉你它能给你什么样的帮助。如果你输入了C-h 又觉得不需要任何帮助,你可以用C-g来取消它。
(在有的地方,C-h的作用被改变了。如果按C-h在屏幕的底部没有出现有关帮助的信息的话,试试用F1和M-x help RET来代替。)
最基本的帮助特性是C-h c。输入C-h,然后是字符 c,然后输入一个命令字符和序列;然后 Emacs 会显示这个命令的简洁的描述。
>> 输入 C-h c Control-p.
显示的消息看起来会象这样:
C-p runs the command previous-line
这告诉你“功能的名字”。功能的名字主要用于对Emacs的功能扩充和定制。但因为功能的名字指出了命令的用途,所以最好不要改动它。
C-h c后面可跟多字符命令,比如 C-x C-s 和 (如果你没有 META 或者 EDIT 或者 ALT 键) v 。
要获取有关命令的更多信息,用C-h k 代替 C-h c。
>> 输入 C-h k Control-p.
这将在一个Emacs窗口里显示命令的文档。当你读完后可以用C-x 1除去帮助文本。如果不想马上离开,你可以一边编辑一边参考帮助文本,然后再按C-x 1。
这是一些有用的 C-h 选项:
C-h f 描述一个功能,在你输入了这个功能的名字后。
>> 输入 C-h f previous-line。 将打印出C-p命令所实现的所有功能。
C-h a 命令查找。输入一个关键字,Emacs将列出所有名字里有这个关键字的命令。 包括所有以Meta-x开始的命令。对有些命令,C-h a 也将列出实现同一功能的 几个命令序列。
>> 输入 C-h a file.
这将在窗口里显示所有名字里有单词“file”的M-x命令。
>> 输入 C-M-v 来滚动帮助窗口,做上几次。
>> 输入 C-x 1 来删除帮助窗口。
Emacs 启动:
直接打emacs, 如果有X-windows就会开视窗. 如果不想用X 的版本,
就用 emacs -nw (No windows)起动.
符号说明
C-X 表示按住CTRL键, 然後按X, 再把CTRL, X一起放开.
M-X META META
在没有META键的电脑上, M-X 等於先按 ESC键, 接著按 X键.
Sun上面META键就是菱形的那个键.
有些系统META键就是ALT键.(或者某一边的ALT键)
C-X或 M-X的X没有大小写分别.
Emacs按键命令基本上是一串C-和M-组成的.
超过两个以上的按键命令, Emacs会在萤幕最下面一行显示你按过什麽.
这一行叫作mini buffer
结束Emacs按 C-x C-c
取消执行 C-g
有些Emacs命令会跑很久, 可以用C-g中断之. 按错键也可以按C-g取消.
上下移动 C-p 向上 (previous line) C-n向下(next line)
左右移动 C-f 向右 (forward) C-b 向左 (backward)
其实Emacs内部没有行的概念, 把一篇文章放在一个大buffer
里面, 所以C-f (forward)就是向档尾移动, C-b (backward)
是移回去的意思, 一次一个字.
翻页 下一页 C-v (view next screen)
上一页 M-v
翻页时,上一页末尾会留一点在萤幕最上面,以维持连续性.
Emacs在游标接近萤幕最下方时会自动跳半页, 把档案往前挪一点,
方便阅读.
重画萤幕 C-L
Emacs里面游标的专有名词叫point. point == 游标目前的 点
游标一次跳一个字(word) M-f 往後跳 M-b
注意 C-f 与 M-f, C-b 与 M-b的对称性.
移到行头 C-a 行尾 C-e
移到句首 M-a 到句尾 M-e
(M-a 到上一个句点後面,一个句子的起头.
M-e 到句点後面)
移到档头 M-< 档尾 M->
删除游标目前指的/後面的字 C-d
前面的字 DEL (Delete键)
DEL的正名叫Rubout (Rub out)
M-DEL 往回删一个字(word)
M-d 往前删 (游标後面)
C-k 删至行尾 (kill)
M-k 删到一句子结尾(删到句点) (kill)
注意Backspace = C-h 在Emacs下是help的意思
後面有(kill)的, 表示此删除的动作是kill, 不太等於delete.
emacs会把kill掉的东西放到kill ring去, 算是一种暂存的地方,
以後可以叫出来.见 yank说明.
Undo: C-x u
C-_ 等於 C-x u 有些DEC终端机, C-/就是C-_
有时等於C-Shift- -
重复执行
举例, 向右移 8个字, C-u 8 C-f
C-u 在Emacs里是蛮特别的,用来设定一些引数(argument/repeat count)
给其後的命令.
C-u 2 0 C-n 向下移 20行
有一个特别的例外, C-u 3 C-v 不是翻三页, 而是整个萤幕向上移三行.
据说这比较有意义.
C-u 1 0 C-x u UNDO 10次
给C-L一个引数会怎麽样:
C-u 0 C-l 会重画萤幕,并且把目前的行移到萤幕第一行.
另外, C-u 100 等於 M-100
C-u 数字 等於 M-数字
X windows 下,
C-left C-right 一次移一个字(word).
C-up C-down 移动一段 (paragraphs/C语言的话是block)
Home = C-a
End = C-e
C-Home = M-<
C-end = M->
PgUp PgDn = M-v C-v
设定重覆次数更加简单,
比如要向右移10个字 C-1 C-0 right-arrow
就是按住CTRL, 然後打10就对了, 比 C-u 1 0 简单.
Mouse中键用来选取有hi-light的地方.
右键是menu-button
如果不小心按两次ESC, 等於 M-ESC, 会有一个讯息跑出来
说你按到一个被disable的命令. 这是高级指令, 作者认为
初学者用不道,所以会问你要不要启动它, 一般回答no.
如果某一行太长, 萤幕显示不下, Emacs会在萤幕最右边打个$,
表示此行未完,右边还有.
把一行拆成两行: 在想拆处按Enter即可.
合并两行为一行: 在行尾按C-d (或行首按DEL)
Yank: 吐出被删掉的(killed)东西.
只要用kill (C-k, M-k等) 删除, 超过一个字的资料,
emacs就会把它存起来, 然後C-y 可以把它叫出来.
功能跟Cut & Paste一样. Kill 和delete不一样, 只有被
kill掉的东西才能用yank吐回来.
游标在同一地方不动, 连续kill掉的资料会被当成一次kill掉的,
yank时会一起回来.
被Kill掉的资料是放在称作 kill ring的资料结构上面, ring就是个圆圈,
被kill掉的东西会依序摆在圆圈上. yank 会放回最近一次kill掉的资料.
如果不是你想要的话, 用M-y 可以换. (M-y就是告诉emacs, 不对不对,
我不是要这一个,换前一个给我).
M-y 要紧接在C-y之後.
拷贝文字的方法== 连续 C-k 几次, 把要拷贝的行全部删掉,
然後按 C-y 弄回来. 再到想复制的地方按一次C-y, 就成了.
把要拷贝的资料kill掉在yank回来好像很笨. 是有比较文明的
方法, 那就是M-w, 不过较麻烦.
首先,要先设标记. Mark 用 C-SPC 或 C-@ 设. 然候
把游标移到另一端, 按 M-w 就可以把 mark 到 point间的
字存到kill ring上. point 就是游标的意思.
Emacs不会把Mark起来的地方用highlight表示, 除非在X下.
在X下, 可以用M-w 来拷贝用滑鼠反白的文字.
kill & yank 就是 cut & paste的意思.
以上大部份指令对Bash的命令列编辑也有效
档案操作
读档: Emacs术语叫 finding a file.
C-x C-f 然後在mini-buffer输入档名. 输入档名时, SPC键有
auto-complete的功能,或者会秀出到目前为止档名前几
个字和输入一样的. (TAB键也有类似功能)
C-x C-f 叫 find-file
C-x C-s 存档 (save current file, save current buffer)
C-x s 存所有的档
C-x i 插入档案 把另外的档案的内容读入目前编辑区内
视窗
Emacs把档案读进来,存在buffer中.
我们透过window来看/编辑buffer.
两个视窗会把萤幕切成两部份, 他们可以同时显示
相同的, 或不同的档案.
对初学者而言, 最需要的是记住怎样让不想要的视窗消失:
C-x 0 关掉目前的视窗
C-x 1 会让目前的视窗占满整个萤幕 (One Window),
取消/关掉其他的视窗.
Emacs里面有许多功能都会开一个小视窗来和使用者沟通, 显示讯息.
有时候不会自动消失很讨厌, C-x 1 就很有用.
另一个功能是如何跳到另一个视窗.
C-x o (other-window)
C-x 2 把目前的视窗切成两个 (水平分割)
C-x 3 (垂直分割)
C-x 4 是一串与视窗有关的指令.
C-x 4 是一串与视窗有关的指令.
C-x 5 则是扩展到X的视窗, 称为frame.
C-x 5 2 就是再开另一个X视窗 (frame).
多档编辑
C-x C-b 看目前有那些buffer (buffer就是emacs放开起的档案的地方).
C-x b 然後在minibuffer输入buffer的名字,可以切换编辑buffer.
TAB键也有作用. 有些内部的buffer (就是没有档案的buffer),
是用*开头和结束, 这个也要打, 如*scratch*
最候提醒:
C-x 1 可以把多馀的视窗关掉.
Emacs扩充指令
前面介绍的emacs按键大部份都是C- 或者 M-的形式.
这是最简单的按法, 由一对按键构成一个指令.
Emacs的按键可以超过2个以上. 如 C-x 1 或 C-x C-b.
一般超过一个按键组合的命令都是用C-x 开头.
另外你也可以直接下命令. 按 M-x 之後就可以打一个Emacs命
令来执行. 一般这些命令名字都很长, 不过都不常用. 等一下
我们会介绍一些. 还有介绍怎麽把这些命令设成按键指令.
C-x C-c 就是结束Emacs. 不过一般Emacs很笨重, 一旦起动就不轻易
退出. 所以比较常用的是C-z
C-z 把Emacs暂停, 回到命令列. 当你下次再需要编辑时,打fg %emacs
就可以把Emacs唤醒.
在X下, C-z会把emacs缩成icon
mode line
emacs编辑画面由 编辑区(buffer) 状态列 (modeline) 和对话区 (minibuffer)
构成. 这里解释 modeline 显示的讯息.
以下是个范例:
–**-XEmacs: xemacs.qs (Fundamental)----74%-------
由後面往前解释, 74% 表示游标的位置.
(Fundamental)表示编辑模式.这是最原始的模式. 编辑不同种类的文章
可能希望用不同的模式, 比如说C-mode, lisp-mode, tex-mode, text-mode
等等. 在不同模式下可能多一些按键出来. 举例text-mode.
M-x text-mode
可以切入text-mode, 这是一般人编辑文字使用的模式. 和Fundamental mode
没什麽差异. 不过游标移动时, Emacs对一个字的定义就有所不同, 因而
M-f M-b 等移动一个字, 一个段落的指令就可能会停在标点符号的前面.
此时状态列变为… (Text)----70%—
以上说的是Major mode. 另外还有minor mode, 其实就是一些额外的功能.
比如说, M-x auto-fill-mode 则状态列显示 (Text Fill).
auto-fill就是自动断行, 让文章每行固定有70个字.
M-X fundamental-mode 可以变回来.
这里要说明一下, emacs在 minibuffer下有auto-completion的功能,
也就是打M-x fund 然後按 SPC, 它会自动补全 fundamental-mode,
不用全打. 如果有两个以上的选择, 它会告诉你. 这个功能对
find-file (C-x C-f)等等档案编辑功能也有效. 前面提过.
最後解释两个**号. 右边的*表示文章被修改过了.
左边的* 表示这个编辑区(buffer)可以修改.
有一些emacs的buffer是read-only buffer, 就会标成%
%%表示档案是read-only.
C-x C-q 可以解开read-only的锁定, 无论如何你要改这个编辑区.
这是个toggle指令, 如果原来是可以修改的, C-x C-q会把它切成
read-only.
Search
没有Search 功能的编辑器简直就是小朋友的玩具. Search
是一项很重要的功能, 所以emacs也提供的很完善.
C-s
C-r
M-x re-search-forward
M-x re-search-backward
M-x search-forward
M-x search-backward
以上这些指令是基本的search指令. C-s, C-r是increamental search,
就是你打字的同时, emacs就直接帮你找. 一个是forward, 一个是backward.
找到了怎麽办? 按C-g可以取消搜寻, 跳回原来的位置. 按Enter就让游标
停在找到的地方 – 此时minibuffer显示:Mark saved where search started
什麽意思? 就是isearch帮你在原来的位置设了一个mark, 然後把point
(cursor) 移到新的位置.
想跳回去原先的地方?
C-x C-x 就可以了.(exchange-point-and-mark)
C-u C-SPC 可以依序跳回前几次设mark的地方.
(C-SPC是设mark, 给它一个argument, 就是反动作)
(还记不记得C-u 可以给後面的指令设一些参数.
有些指令拿这个参数来当作repeat count,
有些指令就只拿来当作on/off, true/false, set/clear而已)
M-x re-search-forward可以让你用regular expression搜寻.
M-x search-forward则没有increamental的功能.
另外一个指令, 作用和grep很像:
M-x occure
和search相提并论的就是replace.
M-x replace 然後按 SPC, 就知道了.
Emacs的设定:
Emacs的设定档是 $HOME/.emacs
你应该多少知道, emacs是用lisp写成的编辑器, .emacs档也都是
要用lisp的语法设定. emacs用的lisp称为elisp, 和一般的lisp差一点点.
有一个info page, emacs-lisp-intro, 深入浅出的介绍emacs lisp.
如果你还不会, 不懂programming, 强烈建议你看这份文件. 如果你
会texinfo, 你可以把它很漂亮的印出来. (内容一点点而已, 两三
天就看完了)
如果你把.emacs搞砸了, 进emacs很奇怪, 怎麽办?
1. 用 vi 改 .emacs :>
2. emacs -q 进 emacs
Major Modes
一般常见的emacs major mode有
fundamental-mode
text-mode
lisp-mode 有自动对括号/重排, 直接执行lisp code功能.
c-mode/cc-mode c-mode是比较旧的c-mode, cc-mode应该是
目前新的c-mode. 有自动重排/对括号的功能.
也可以在emacs内compile, 跳到compiler error
修正错误. 执行程式时debug. (配合dbx/gdb)
compile是透过Makefile进行.
tex-mode Tex/Latex编辑模示. 可能是打一些奇怪的标点
符号比较方便.
-mode
同lisp/cc-mode. 如果是interpreter的话,
emacs通常都可以直接执行/debug.
-mode还有tags的功能, 後述.
html-mode, texinfo-mode, sgml-mode: 编写html, texi, sgml之用.
w3-mode WWW browser. 在x-win上不满意,但可以接受…
Tags
Tags 是一个显为人知的功能? 所以我想提一下. 这不是emacs发明的,
而是vi 原本的特异功能. emacs只是发扬光大而已.
假设你有一个目录, 里面是一个程式的原始码, 比如说, tin 的原始码,
放在 ~/tin-1.3beta 下面. 你想看它们.
首先, 叫emacs cd到该目录:
M-x cd
然後, 建立tag table.
tag table 就是一张对照表, 记录哪个符号(variable/function call)
对映到哪个档案的哪个地方. 有这张表, emacs可以让我们快速的在程
式码内游走. 一般这张表是一个档案, 叫作TAGS (大写)
M-! etags *.[ch]
M-! 是执行external shell command的意思. etags就是emacs的建表程式.
你只要告诉它你的source code在那□即可.
vi的话是使用ctags这个程式, 它建出来的档名叫tags (小写). 因为
我们介绍emacs, 所以不管它.
然後, 怎麽看程式? 你知道所有的C 程式都是由main()开始, 所以你想
找到main()在哪个档案. 这时只要按 M-. 然後emacs会问你tag table
在哪里. 因为我们已经cd到该目录, 直接按enter就好了. 然後输入main,
emacs就会把你带到main(){ … }去.
如果 你看到某个程式片断呼叫一个你没看过的函式, 你可以把游标
移到该函式的名字上, M-. ENTER 就搞定了.
如果 emacs找错了 (比如有变数和函式同名, emacs跳到变数去),
那你可以用 C-u M-. 找下一个.
在编辑程式码的时候, M-SPC 很有用, 它会把游标附近的空白缩成一个.
在其它地方也有效.
Emacs的一些package:
M-x dired (或C-x d)
游走/编辑 目录, 就是档案总管的意思 😃
M-x man 就是man page
M-x shell 开个command prompt, 不过不能跑vi,elm, tin…
M-x gnus 读新闻/读信
M-x rmail 读信
M-x vm view mail
M-x mh-rmail 读信 (package mh-e)
M-x mh-smail 送信 (package mh-e)
强列建议改用emacs读news/bbs. 世界会更美好!
读信的话就要看你的感觉. 这些读信程式都会把信从系统的mail folder
搬到自己的目录下, 占用quota, 我不喜欢 :p 建议elm或mutt.
除非参加mailling list配合procmail. 不然不实用.
用mh-e 须要装mh 这个外部程式, 不太好. 建议vm 或 gnus.
写完信, C-c C-c 就可以送信.
如果你的资料用rcs/sccs作版本管理, emacs自动会起动version control
(minor mode.), c-x c-q 变成check-in/check-out.
如何取得更多的资讯:
Emacs的lisp 经过多年的发展,已成为完整的self-documenting系统.
很多东西都可以线上找到你要的资讯.
前面说过,或者你已经不小心按backspace遇到了, C-h (就是backspace
的ascii码) 在emacs里面是help的意思, 它可以带出一串指令.
常用的有:
C-h F Emacs FAQ
C-h t Emacs 使用教学
C-h n Emacs NEWS file, 介绍最近改版的新功能
C-h i Info system. Info是gnu用来取代man page的系统,
基本上和文字模示的WWW差不多. 有许多重要的资讯
可以在这边找到. 如果你是新手, 建议你在x-win下
看. 不然, 按键 m (menuitem), SPC next page
l (last node: node就是章节的意思) u (up node)
d (directory, 索引). BS (Backspace, back a page).
如果全部只按SPC, 就跟man 一样.
C-h k describe key, 告诉你按这个键执行那个lisp function.
C-h f describe function. 告诉你function在作什麽.
如果只按SPC, emacs会给你所有lisp 函数的列表, 和说明.
C-h v describe variable 同function.
C-h a apropos的意思(approximate). 给lisp function的部份
字串, emacs帮你找.
C-h b 列出目前所有的keybinding
C-h m mode help. 列出目前的mode的特殊说明.
C-c C-h 列出以C-c 开头的所有key-binding. 虽然说Emacs
可以定义按键, 可是Ctrl- 开头的所有组合大概都用光了,
只有C-c算是可以自定指令. 不过有些mode也侵犯这个空间.
目前的convention是C-c 留给user, C-c C-
留给package.
有以上这些help, 你的emacs/elisp功力会随著时间成长.
Elisp 简介:
Emacs有三份手册.第一份是使用手册, 第二份是Elisp 手册, 第三份是
Elisp 简介. 第三份的程度是入门级, 值得看. Elisp手册其实也写的
很简单, 还教你lisp, 不过有点长, 适合参考.
因为我lisp没有仔细学过, 所以:
以下所言, 如有巧合, 那才是真的.
Basic data type
字串 (string) “Hello, World”
字元 (char) ?a ; 问号开头
atom & list:
(1 2 3 4) 是一个list, 由 4个 atom 组成.
pair: 中间是句点.
(apple . 2)
alist (associated list)
就是一堆 pair的集合,就像perl/tcl的associative array.
或者说是一个资料库, 一堆 (key, value) pair.
'((Apple . 1)
(Orange . 2)
(PineApple . 3))
vector (?)
emacs 19用vector 来表示按键(key strok sequence)
[f1] [f2] [f1 a]
nil 就是空的list, 或者表示 false
t true
Forms
我们写程式最好有样版让我们填空最简单了.
Form 就是样版, 不过意义不太一样.
Form 就是Elisp 可以接受的句型.
lisp 解译器 预设是对list的每个元素求值(evaluate),
除非是 special form, 有特殊的定义. 比如说
(defun FUNC (ARG-LIST)
BODY …)
就是一个special form, 用来定义函式, 所以FUNC 不会被
求值, 被当成symbol, …
(quote (LIST))
这也是个special form, 叫 lisp 把 (LIST)当做symbol就好了,
不要 evaluate.
quote 很常用, 所以有个缩写:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
Mysql面试题汇总(一)
Mysql面试题汇总(二)
Redis常见面试题汇总(300+题)
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
,而且极易碰到天花板技术停滞不前!**
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-5AHV7tIy-1712141533154)]
[外链图片转存中…(img-WDC4I4SZ-1712141533155)]
[外链图片转存中…(img-v83vCKjV-1712141533155)]
[外链图片转存中…(img-b79VAlV7-1712141533155)]
[外链图片转存中…(img-8xMybk6I-1712141533156)]
[外链图片转存中…(img-1NpyLHf3-1712141533156)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-PLHOSm0W-1712141533156)]
那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
[外链图片转存中…(img-4lXkKf2y-1712141533156)]
Mysql面试题汇总(一)
[外链图片转存中…(img-njSxgzWT-1712141533157)]
Mysql面试题汇总(二)
[外链图片转存中…(img-xZOTox7M-1712141533157)]
Redis常见面试题汇总(300+题)
[外链图片转存中…(img-58nIRonY-1712141533157)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算