emacs中文.docx
《emacs中文.docx》由会员分享,可在线阅读,更多相关《emacs中文.docx(20页珍藏版)》请在冰豆网上搜索。
![emacs中文.docx](https://file1.bdocx.com/fileroot1/2023-2/7/bb6ce173-1a2e-419f-b4e2-60cc83680c2f/bb6ce173-1a2e-419f-b4e2-60cc83680c2f1.gif)
emacs中文
参考书目:
1.GNUEmacsManual(Emacs官网有下)
2.O'RellyLearningGNUEmacs,3rdEdition
一、Emacs的安装使用
学习软件的第一件事当然是把它下下来,http:
//ftp.gnu.org/pub/gnu/emacs/windows/emacs-23.1-bin-i386.zip目前最新版23.1,这个版本号够吓人的,Opera的10.0还不及别人的一半。
本人不幸,使用的是Windows版本。
安装过程异常简单,直接解压就行,但路径中不能包含空格,所以就表往ProgramFiles文件夹下面丢了,我是直接放在根目录的,找起来也方便。
运行bin目录下的addpm.exe可以添加开始菜单快捷方式。
也可以直接运行runemacs.exe来启动Emacs。
卸载也很方便,Emacs不会对系统写任何垃圾东东,直接删除文件夹即可卸载,还有你的快捷方式。
启动Emacs后的界面如下:
猛的一看,没什么太出彩的地方,感觉比较简陋。
上面依次是标题栏、菜单栏、工具栏,中间一大块就是编辑文本的地方,下面两行是modeline和echoarea。
echoarea是你输入命令和显示消息的地方。
在modeline中第一个字符表示字符集,c代表chinese-gbk,后面那个\符号表示换行类型,\是指DOS的CRLF换行,另外还有Unix的LF换行和Mac的CR换行。
然后一个字符,表示打开的文件是否可写(先称为文件便于理解,实际上是buffer),%表示只读,-和*表示可写。
再一个字符表示文件是否已写,%或-表示还没动,*表示已经更改。
这两个字符组合起来有四个状态。
符号
表示
%%
只读,未更改
--
可写,未更改
**
可写,已更改
%*
只读,已更改
再后面一个-表示路径,后面黑体的*GNUEmacs*表示buffer的名称。
后面的All表示光标的位置,当文件在一页就能显示完的时,这里是All,此外还有Top,Bot,以及当前位置百分比。
L5表示第五行。
Fundamental是模式名,模式种类很多,这个以后介绍。
如果是第一次使用,点击EmacsTutorial,里面也有Emacs的一些基本介绍,而且是中文。
二、Emacs按键
Vim把控制和编辑分成了两个模式,单独操作,互不影响。
而Emacs是同时进行编辑和控制,只不过控制命令需要使用控制键。
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的快捷方式。
我们除了使用组合键意外,还可以直接调用函数。
按下M-x,然后输入函数名就可以调用函数了。
三、进入退出Emacs
进入前面已经说了,现在说怎么退出。
最直接的办法,点右上角的叉,当然这个没什么技术含量。
比较文明的方法,C-xC-c,如果当前文件已经修改会问你是否保存。
野蛮点的方法,调用函数kill-emacs,即M-xkill-emacs,直接退出,不管是否修改。
不过直接退出后,Emacs会在相同目录下保留一个以#号开头结尾的相同文件名文件,下次启动可以使用M-xrecover-file来恢复。
如果是多次保存后,还会有个以~结尾的文件,保存了上次信息。
上回开了个头,简单的介绍了Emacs的一些基本常识,这回继续说基本常识,怎么移动你的光标。
可能有人会说,这上下左右键不是很好用吗,还用你来讲。
呶,Emacs的强大在于你能够只使用键盘左边那堆键来完成任何事情(不包括顶上的ESC和Function),这也是Emacs的设计宗旨。
为了试验这些按键,大家在进入Emacs时选择页面中间的EmacsTutorial,这里面可以随便乱按不用担心出什么岔子。
一、基本导航
看下面这张图片:
可以这么记,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对页面中似乎情有独钟啊。
二、中级导航
按字符移的上节说了,然后说按单词移动:
M-f向前移动一个单词,Emacs理解的中文单词是两个标点符号之间的东西,所以中文就是移到下一个标点符号的位置。
往回是M-b,向后移动一个单词。
C-a移动到行首,C-e移动到行尾。
M-a移动到句首,M-e移动到句尾,在中文中一般就是跑到句号的位置,这里我不得不说一下,现在很多年轻人写文章有一逗到底的习惯,就只在文章最后加个句号,如果用Emacs来看你的文章,一个M-e啥都不用干了。
作为一个有一定文学素养的人,在此我严厉反对这种写文章的作风,不和谐。
M-}移动到下一段,M-{移动到上一段。
还有两个跑的更快的导航,M-<移到文档首,这里要注意是小于符号<,不是逗号,,所以我们是按Alt+Shift+, 切记。
移到文档尾是M->。
C-x[和C-x],分别是往上一页和往下一页。
这里页是由分页符控制的,在EmacsTutorial中是没有分页符的,所有这两个键会跑到文档头和文档尾去。
例图:
阴影处是当前光标的位置,其它箭头所指是按相应键后光标的位置。
三。
高级导航
可以这么来看基本导航是普通人用的,中级导航是高手采用的,高级导航是砖家、叫兽用的。
M-r移动到页面中间行首位置,hollyshit,又是页面中间,真XX阴魂不散。
M-xgoto-char(n),这个比较复杂,先按M-x,然后空格输goto-char回车,另外Emacs有Tab键补全功能,大家可以试试,如果有多个选项会有提示,最后输入一个整数。
这个东西会移动到从头数第n个字符的位置,我估计不会有人变态到能记住每个字是第几个字符。
M-gM-g[n],按两次M-g,不用回车,提示输入一个数字,移动到指定行n,两个M-g,也可以输M-gg。
还有一个比较罕见的,C-xC-n,这个是设置当前列为目标列。
这是什么意思呢,本来我们按C-n和C-p时,光标会往下或往上移一行,而列的位置就是当前光标列的位置,除非下一行列没那么多(就是字符没那么多),光标会到距当前列最近的列。
而我们可以用这个组合键重新设一个目标列,这样在按C-n和C-p时,光标会跑到我们设的目标列上。
如果你不幸按了,而且又不习惯,可以使用C-uC-xC-n来取消目标列设置。
补充一点,这两个命令都是禁用命令,是Emacs考虑大家多半不会用,而且比较怪的命令,所以通常就禁用了,你不小心调出时会给出提示问你是否需要继续。
就像这个样子:
大家按个空格稍微试下就行了。
最后还有两个重复命令:
M-n,n是数字,意思是重复下个命令n次,比如M-3C-f,就是向前移三个字符。
C-un,n还是数字,也是重复下个命令n次。
如果省略n,就是4次。
按两次C-u,就是重复16次。
小结:
按键
命令
作用
C-f
forward-char
向前一个字符
C-b
backward-char
向后一个字符
C-p
previous-line
上移一行
C-n
next-line
下移一行
M-f
forward-word
向前一个单词
M-b
backward-word
向后一个单词
C-a
beginning-of-line
移到行首
C-e
end-of-line
移到行尾
M-e
forward-sentence
移到句首
M-a
backward-sentence
移到句尾
M-}
forward-paragraph
下移一段
M-{
backward-paragraph
上移一段
C-v
scroll-up
下移一屏
M-v
scroll-down
上移一屏
C-x]
forward-page
下移一页
C-x[
backward-page
上移一页
M-<
beginning-of-buffer
移到文档头
M->
end-of-buffer
移到文档尾
M-ggn
goto-line
移到第n行
(none)
goto-char
移到第n个字符
C-l
recenter
将当前位置放到页面中间(Emacs最喜欢的地方)
M-n
digit-argument
重复下个命令n次
C-un
universal-argument
重复下个命令n次,n默认为4
注:
这里命令这列就是按了M-x后输的东东。
上回说到怎么在Emacs中移动光标,这回将介绍如何在Emacs中编辑文本。
任何一款文本编辑软件的核心功能当然就是编辑文本,Emacs也不例外,虽然它也有许多其它强大的本领,但都离不开文本编辑。
闹,文本编辑说白了也就是打字,专业点说我们需要实现一种所见即所得输入方式。
在Emacs中打字和Notepad中没什么区别,一样也是打开一个文件直接往里面敲字符就可以了,中文也行。
这个和Vim区别比较大,我们还需要知道自己是在哪个模式下,不然乱敲一气也不见屏幕有什么反应。
一、文件操作
刚才我们说到编辑文本就是打开一个文件往里面敲字符,所以我们第一件事就是打开一个文件。
C-xC-f输入这个命令后在回显区会看到一个提示“Findfile:
”,然后是我的文档的路径,这时需要输入你编辑的文件的名称。
注意,这里的输入的文件名可以包含路径,比如D:
\text.txt,或者是相对路径。
还有就是在Windows中我们可以使用Windows风格的反斜杠"\",当然了也可以使用正斜杠"/"。
如果输入了一个新的路径,Emacs的当前路径会跳转到你输入的地方,(实际上是新开了一个buffer)。
如果Emacs没找到你输入的文件,它会以你输入的名字自动新建一个文件。
另外Emacs还支持拖拽,就是说可以把文件图标拖到Emacs中来打开它。
当你不小心错打开一个文件时,可以使用C-xC-v来换一个,操作和C-xC-f一样,这个区别嘛是Emacs在buffer中处理有些不同。
C-xC-s这个命令是用来保存文件的,另存是C-xC-w,这两个都比较简单,一看就会。
二、输入文本
除了一些基本的输入方式,Emacs还可以输入非打印字符,就是ASCII表中前面的那些字符。
使用C-q(n),这里的n代表一个八进制数,就能打出n对应的ASCII表中的符号。
还有就是Unicode字符比如日文啊韩文啊,使用C-x8后面接Unicode标准中字符的名字或者编码就可以输出这个乱七八糟的东西了。
这我相信不会有谁闲的无聊来记这种一长串数字的,而且我们有更为先进的方案,(广告时间)当。
。
当。
。
当。
。
,现在隆重推出Unicode字符超级输入工具——搜狗软键盘,省去了你记忆一大堆16进制数的烦恼,还能输入中文,实在是居家旅行必备良品。
三、删除文本
相比输入,Emacs删除文本的花样就比较多了。
Backspace,退格键,这个比较传统就不说了。
Del键,删除光标处的字符,虽然这个也很常见,但它违背了Emacs的原则,“你的手不用离开主键盘区”,所以我们用C-d来代替。
M-d,这个用来删除一个单词(记住在中文中单词表示两个相邻标点符号中的句子,所以如果你是打中文这个键还是少用,稍不留神多长一截句子就不见了)。
而且它删除的是从光标当前位置到单词结束,还会把单词前半截留给你。
相对应,删除单词前半截可以用,M-Backspace。
M-k,删除一段句子,这个在中英文有些不同。
中文里面它只会删除到句号为止,包括句号。
而英文中,它不认'.','!
‘,这些东西,而是把整段都删了(英文的分段用两个回车表示)。
和M-d一样,它也是从光标处开始删。
对应删回去是C-xBackspace。
C-k,从光标起删除当前行。
一个比较详细的例子见下图:
(宽线覆盖的文字就是使用箭头指向的命令删除的部分,注意中英文的区别)
四、撤销命令
操作难免有失误之处,Windows里面Ctrl+z命令使用频率也是蛮高的,不过在Emacs中按Ctrl+z会发现窗口最小化了。
Emacs中要达到撤销效果使用的是C-/,同样还可以使用C-_或者C-xu,这三个都对应的是Undo命令。
和Vim类似,Emacs中删除的内容也保存在一个缓冲中,相当于一个剪贴板,我们可以很方便的调出某一次放进去的东西,这个地方我还没仔细看,放到以后再讲。
上面说的是撤销文本上的操作,还有个比较常用的命令C-g,这个是用来撤销命令的,当你输了一半命令发现不对就可以用它了。
五、一些杂项命令
有些比较零碎的命令又比较常用,呃,其实应该放到第一章的,先搁在这儿吧。
帮助命令:
C-ht调出EmacsTutorial。
C-hr调出EmacsManual。
C-hk(command),调出对应command的帮助,比如C-hkC-n就是查看C-n的帮助。
空白行:
插入空行,C-o。
删除空行C-xC-o,注意,如果有许多空行时,这个命令会删的只剩一个空行,只有一个就直接删了。
这两个命令并不是完全对应,插入空行实际是插入一个回车换行符,而删除空行的标准是这一行什么文字都没有才删了,如果我们在一行文字中间按C-o,光标后面的内容会移到下一行,再按C-xC-o却没有反应,因为这行前面还有内容。
重复命令:
上章介绍两个数字参数的重复命令,这儿还有一个不带数字参数的。
C-xz,这个命令的对象是它前面输的命令,比如,先按C-n,再按C-xz,就会重复一次C-n,然后我们每按一次z,就再往下走一行,相当方便。
小结:
按键
命令
作用
C-xC-f
find-file
打开文件
C-xC-v
find-alternate-file
打开另一个文件
C-xC-s
save-buffer
保存文件
C-xC-w
write-file
另存文件
C-q(n)
quoted-insert
插入字符,n表示字符的八进制ASCII码
C-x8
ucs-insert
插入Unicode字符
C-d
delete-char
删除光标处字符
Backspace
delete-backward-char
删除光标前字符
M-d
kill-word
删除光标起单词
M-Backspace
backward-kill-word
删除光标前单词
C-k
kill-line
删除光标起当前行
M-k
kill-sentence
删除光标起句子
C-xBackspace
backward-kill-sentence
删除光标前句子
(none)
kill-paragraph
删除光标起段落
(none)
backward-kill-paragraph
删除光标前段落
C-/
undo
撤销
C-_
undo
撤销
C-xu
undo
撤销
C-g
keyboard-quit
撤销命令
C-ht
help-with-tutorial
调出EmacsTutorial
C-hr
info-emacs-manual
调出EmacsManual
C-hk(command)
describe-key
查看对应command帮助
C-o
open-line
插入空行
C-xC-o
delete-blank-line
删除空行
C-xz
repeat
重复前个命令
上回介绍了在Emacs中如何插入删除文本的简单操作,以及一些杂七杂八的命令,都还是蛮容易的。
这回先跳过编辑这部分,介绍Emacs中的Minibuffer,呃,翻译过来叫迷你缓冲,听着比较难受,后面还是用E文吧。
一、初识Minibuffer
Minibuffer乃是Emacs命令读取复杂参数的位置。
比如说文件名,缓冲名,命令名以及Lisp表达式这些东西。
Minibuffer显示在echoarea中,当Minibuffer处于使用状态时,会出现一个彩色的提示符并以冒号结尾,根据提示符信息输入参数,以回车提交。
取消Minibuffer使用C-g,也就是上节介绍的取消命令。
其实Minibuffer并不是太神秘,最常见的地方就是打开文件时提示我们输入文件名:
按下C-xC-f后,回显区就会变成这个样子,其中Findfile就是Minibuffer的提示符,因为它是蓝色的。
后面的路径是Minibuffer自动添加的默认值,我们可以把参数选项insert-default-directory设置为nil,关闭这个默认路径。
这里插入一下如何设置Emacs参数选项,我们键入M-xset-variableRETinsert-default-directoryRET后输入nil即可,这里的RET代表回车。
改回默认,前面输入一样最后输入t。
其实我们按下M-xset-variable也激活了Minibuffer。
二、在Minibuffer中编辑
我们可以将Minibuffer看成和主输入区类似的缓冲,Minibuffer中也有个buffer嘛,就是说某些主输入区的命令Minibuffer也可以用。
同样我们看上面那张图,使用C-a可以把光标移到d字符的位置,再按C-e光标又回到最后,还可以使用M-Backspace删除“info/”回到上级目录。
不过需要注意的一点是,RET是Minibuffer的结束符而不是换行符,所以如果我们需要插入新行就不能使用回车,而是用C-o。
同样对于TAB、SPC、?
(前两个分别对应Tab键和空格键)在Minibuffer中经常用于自动补全,所以也不能直接输入,我们需要使用C-q来插入,比如TAB,就用C-qTAB来替换。
可以说Minibuffer和主输入区基本上一样,同样的快捷键、同样的操作方式,复制粘贴功能一应俱全。
通常情况,Minibuffer在屏幕中只有一行,随着你输入的增多,Minibuffer会自动调整大小来适应。
变量resize-mini-windows用于控制Minibuffer的大小变化,其默认值是grow-only,大小只增不减,设为t后,如果你删除一行会自动缩小,设为nil,就不会动了。
变量max-mini-window-height控制Minibuffer高度的最大值,设为浮点数表示占整个窗口的百分比,整数表示最大可以有多少行。
默认值是0.25。
当我们操作Minibuffer时也可以控制另一个窗口,C-M-v命令就是用来滚动另一个窗口的文本,这个是往下翻页,C-M-S-v是往上翻页,大家要看清楚,这不是四个键一起按,如果你不小心按的是s键,你会发现出来的是QQ聊天窗口,所以出于对中国广大QQ用户的考虑,Emacs把它改成了大写的s,就是说还要加上Shift键,呃,这是我目前见的最长的按键了而且比较变态。
其实,也有简洁的方式,M-PageUp和M-PageDown,不过这两个键不在主键盘区,就看各位心情了。
Minibuffer一般情况是不允许递归调用的,也就是我们不能连按两次C-xC-f,它会提示Minibuffer正在使用,我们也可以设置变量enable-recursive-minibuffers为t来激活递归调用,不过容易引起错误,大家还是尽量避免吧。
三、自动补全
Emacs中的命令有那么多,我们也不可能每一个都记的住,电脑里的路径也很长,记漏几个字符也很正常,这个时候自动补全就显得很重要了。
常用的自动补全有四个键TAB、SPC、RET和?
。
我们先看它们的准确定义。
TAB 尽可能的补全Minibuffer中的字符,如果没有满足要求的,则列出所有可能的补全。
对应命令minibuffer-complete。
SPC 最多补全Minibuffer中的一个词,如果没有满足要求的,则列出所有可能的补全,在输入路径时SPC不可用。
对应命令minibuffer-complete-word。
RET 提交Minibuffer中的文本,或者选取第一个可能的补全提交。
对应命令minibuffer-complete-and-exit。
?
列出所有可能的补全。
对应命令minibuffer-completion-help。
下图就是我们按insTABTAB后自动补全的例子:
第一个TAB补全了“ert-”,第二TAB列出了所有可能的补全。
再仔细解读下这几个键,TAB是用的最多的自动补全,可以说每个操作系统的shell都支持TAB自动补全,它的设计目标也是尽可能的补全我们的输入,而一次补全需要满足下面三个准则:
∙光标前Minibuffer中的文本必须和补全候选项中开头的内容一致,如果光标后还有文本则其需为补全候补项剩下内容的字串。
∙如果不满足上一条件,则使用部分匹配补全,即将Minibuffer中的文本以"-"或者空格分开,分别补全。
比如输入"em-l-m",再按TAB,则会补全至"emacs-list-mode"。
∙如果仍无满足的候选项,则继续使用第一条准则,不过忽略光标后的文本。
空格键的匹配模式与TAB类似,不过它只匹配到下一个"-"或者空格,比如输入auto-f后按空格会完成auto-fill-,需要再按一个空格才会完全补全为auto-fill-mode。
此外,在TAB和SPC的匹配当中可以使用通配符"*",代表任意一个或多个字符。
在没有完全匹配项时,Emacs会列出所有满足条件的匹配,我们可以使用多种方法来选择某一项。
Mouse-1,Mouse-2,就是鼠标左右键。
或者在Minibuffer中按M-v,就会切换到补全候选项窗