Emacs-tutorial官方文档

      GUN-Emacs-tutorial 

应该说一切技术的入门学习都离不开tutorial文档。EMACS的tutorial文档主要介绍基本的文本查看,编辑和查找操作,目的是让初学者对EMACS有一个大体的认识。本系列只针对Mac系统。

1. 启动Emacs并查看文档

  Emacs有graphic和terminal,这里只讨论terminal。

  EMACS的便捷性在于它只用键盘操作便可以完成很多的事情。打开emacs之后,界面中的英文主要是如下几部分介绍:

      1.对主要的操作键介绍:‘C-’指的是control键;‘M-’指的是Mate键;‘C-h’表示在按control键的同时按h键。

      2.tutorial(入门文档     ‘C-h  t’)。

      3.manuals(详细文档   ‘C-h  C-m’)。

      4.退出  ‘C-x  C-c’。

      5.直接进入编辑区进行文本编辑    ‘C-l’。

  a.认识emacs的terminal界面

主要有是三部分:Main Window区,ECHO AREA区, MODE LINE区

  在emacs下的主要使用界面就是Mainwindow了,但是在这里的window包括后面的frame都和其他的applications中不一样,这个后面会谈到。

  ECHO AREA主要用来给出你按下的键,有提示的作用。

  Mode LINE比较重要,关于当前buffer的很多信息在上面都可以看到:这是关于MODELINE的document。 

   

   

      cs:ch-fr  buf      pos line   (major minor)

  上面的格式就是在 graphical 下 MODELINE 的显示,在 terminal 下后面会有一行的dashes(破折号);

  <1>cs(注意不是一个字符而是一个String,字符串)和后面的冒号,表示的是当前的buffer所用到的字符集以及换行符;一般情况下emacs会自动设置这些属性;cs如果是dash(破折号),表示没有字符集处理。不同的程序语言发明者都有自己的一套CodingSystem,但是emacs内部是将这些语言的字符集进行转化Convert,来使用(输入输出)。命令:‘M-x list-coding-systems’来查看emacs中支持的所有字符集。

 

  这里可以看到,第二行中的关于CodingSystem的格式介绍:MNEMONIC-LETTER -- CODING-SYSTEM-NAME;u表示的是utf8编码格式;这是关于Coding-System的document

  <2>ch主要指的是当前buffer的“读写情况”以及“是否被更改”;

 

符号 表示
%% 只读;未更改;
-- 可写;未更改;
** 可写;已更改;
%* 只读;已更改;

    在ch-后面还有一个fr;主要是指frame;这个是一个区别于window新的概念,后面会谈到。  

  <3>后面的filename实际上是当前的buffer名称;再接上就是pos,   和mode;这里比较重要的就是Mode,后面会谈到。

  b.关于Mac用户对control和meta键的设置

    在Mac的键盘上对于control和option键的设置使得emacsers使用起来特别不方便,所以有必要重新设置。

    首先将control键和caps-lock(用来设置大小写)换一下位置:SystemPreference---Keyboard然后将两个键相互交换。

       然后打开terminal终端,在terminal的preference中将Mate键添加在option上。

     c.一些关于查看的主要快捷键

    首先说明:在EMACS中是buffer机制,也就是说在(fundamental-mode)查看文档的过程中可以随意修改文本,但是只要最后不保存就不会有什么问题。

     首先,让光标动起来:C-f 表示前进;C-b 表示后退; C-n表示下一行;C-p表示前一行;这四个快捷键实际上已经够了,是最基本的使用。但是缺点是上述的四个只是一个字母一个字母的移动。下面介绍不同程度的光标移动:C-l表示半页(按两次C-l就可以将鼠标所在的行移动到首行。);C-v表示下一页;M-v表示上一页;M-f表示下一个单词;M-b表示上一个单词;M-a表示下一句话;M-e表示上一句话;C-a,C-e也是以行为单位,但是它们只是针对一行,也就是说移动到行位/行首。M-<表示回到文档的开头,M->表示去文档的结尾。

    d.注意

    ‘c节’中的快捷键只是单纯操作,但实际上emacs远远不止这些。

    C-u表示可以给每一个命令设置参数,默认是4:比如C-u 8 C-f表示向前移动8个character(字母);C-u C-f表示移动4个character;

        C-g是用来撤销命令的。如果指令按错了,可以用C-g来撤销;

    有一些快捷方式随着emacs的发展逐渐不用,一旦有用户不知情,emacs会给出指令:

 这时候如果不打算接着使用,就输入  n (no)来结束。

    要注意命令中带有‘C-x f’的意思是‘C-f’键一起按下,然后再按f键。不能全都一起按下!

    e.如何在emacs中直接查找快捷键的使用方式

    emacs提供了很多的解释性文档,但是为了查询一个功能就将其都看一遍很不现实。所以它提供了‘C-h’+一系列的快捷键来方便查询,这里只提供本章会用到的,:

    k  某一个快捷键对应的命令

    w  某一个命令对应的快捷键  

   上述只是了解了一下emacs,这是emacs的官方网站

2. 用emacs进行简单的文本编辑

    emacs对文本,程序的编辑能力是非常强大的。这主要是因为它是一个可扩展的软件,其他编辑器中比较好用的功能都可以通过自己写配置文件的方式来添加到emacs中。这种造轮子的事情当然是高手来做的。初学者主要还是先学会:使用(多练)——— 模仿高手的配置(多上社区)。当然这些都和本章没有关系。。。后话。

    tutorial文档的后几节主要讲了file(文件操作),buffer(缓冲区),multi-window和frame,配合一些键盘操作。更深一层的认识emacs的强大功能。

    a. window

     一个窗口就是一个window,这是最直白的解释。但是在编辑代码的时候很多情况下不止会用到一个窗口。emacs提供了多窗口来满足这一需求。

 

     刚才我按下‘C-h k C-f’指令,意思就是查询C-f这个快捷键到底能干什么用。emacs自动生成两个窗口来解释。如果要恢复到一个窗口——‘C-x 1’

     如果出现了多个window的情况,到底如何在键盘下实现不同的window的工作切换(toggle),emacs提供了快捷键:‘C-x o’;另外,如果你在a工作,想实时的看见b的状态:‘C-M-v’可以实现“scrolling the other window”。之后如果可以自己写配置文件,甚至可以为不同的window设置不同的参数,是不是很厉害。

    b.文本编辑操作

    之前有提到过buffer机制,所以这里只是在默认buffer上直接编辑,目的的先学会简单的编辑操作,然后在去文件中进行编辑。

    insert:随便在Mainwindow上敲字就是insert。

    delete:关于删除会有很多细节的东西,这里先说明一些删除的快捷键:

     在键盘上的直接删除Del键是指清除光标前面的字符,而‘C-d’表示清除光标后面的字符;‘M-Del’表示剪贴光标前面的单词,‘M-d’表示剪贴光标后面的单词;‘C-k’表示剪贴从光标开始一直到一行结束的所有。‘M-k’表示剪贴从光标开始后面的一句话。这个还是试试就清楚了。关键是这两个词语——“清除”和“剪贴”;

    在emacs里:剪贴是可恢复的(恢复操作叫做:yanking;指令是‘C-y’);清除是不可恢复的;

    想想电脑中的剪贴板机制,这个就很容易懂了,不管你之前剪贴多少次,最后剪贴板里面的只有最近的一次内容。所以在你想要yanking回来的时候,‘C-y’只会帮你找到最后一次内容(这个不同于一般的剪贴,具体是指:中间不间断的连续剪贴都算一次剪贴,内容会按照顺序放在剪贴板中。)。但是这可是emacs,它的强大之处就在于编辑。所以这种BUG早就被解决——‘M-y’;该快捷键会帮你找之前所有的剪贴内容(是没有重新登录之前),有点像git中的查找原始版本功能;

    这里还有一个新的命令来实现剪贴:‘C-<spac>’但是在Mac中这个命令是用来切换输入法的;不过之后学了基本配置就可以解决这个问题;先留下来。

     最后一个:‘C-x u’是撤销。用来撤销之前的编辑操作。

    c.file操作

     想要编辑的文本长期保存,就必须将其“save”。

     emacs中在当前目录下找到一个file:‘C-x C-f filename’;如果不存在,emacs会自动创建一个。而且在最后编辑结束之后,一定要进行保存:‘C-x C-s’;emacs提供了多文件同时编辑的功能,这个也得益于buffer机制。对于多个files,如果想要知道当前的buffer中到底有多少未保存的file:‘C-x s’;然后选择保存即可。

     这里又出现了frame。一个emacs是指整个emacs界面,不一样的Mode有不一样的frame。先这么理解。所以当进行filename的输入的时候,emacs界面最后一行的部分叫做:minibuffer。用来提示输入信息。在minibuffer上面可以看到有“--:--tutorial”,就是文件名(这是在基本Mode下)。下图是在TEXT-Mode下。

    未保存之前,会自动生成一个名为“#filename#”的中间版本,等到保存之后会自动消失。如果系统突然奔溃,也不至于会丢失文件。

    d.buffer

    对于emacs下的所有编辑工作,都是基于buffer机制的。缓冲区的概念学过C的应该不会陌生。而emacs的缓冲区对应multi-window,multi-file,每一个file 都有一个buffer,这样使得编辑工作变得方便很多。也就是说:在emacs下支持多文件同时编辑,而且文件之间绝对不会受到影响。可以用多个窗口实时显示编辑信息,也可以通过快捷键来switch buffer。

    在emacs中的所有显示,都是某一个buffer中的内容,具体是哪一个:‘C-x b’来查看当前的buffer。想要switch不同的buffer:‘C-x C-b’就行。  

     e.Mode

    不同的buffer可能对应不同的mode。主要是用来设定不同的键盘绑定方式和文本显示方式。在MODE LINE界面可以看到当前正在使用中的mode。切换不同mode:M-x modename mode

 

M-x Java-mode mode for editing javafiles 
 M-x python-mode  mode for editing pythoniles 
 M-x text-mode  mode for editing textfiles 
 M-x fundamental-mode  Mode with no specializations at all

 

    emacs中不同的major Mode主要指的是不同的编辑环境,因为编辑的语言,文字可能都不同比如Elispmode,fundamental等。实际上emacs在你输入文件后会帮你找到合适的mode编辑,所以很少用到模式切换。

      还有一类叫做minor mode,是互相之间独立并且和majormode独立的功能块。实际上代表了一些appendix的编辑功能。方便很多。

 

M-x auto-fill-mode Wraps your lines automatically when they get longer than 70 characters
M-x flyspell-mode Highlights misspelled words as you type.
M-x follow-mode use both two windows to scroll together

     再说一次,每一个mode只针对一个buffer。但是还是有一些minor mode会影响到所有的buffer:

          

M-x icomplete-mode In the M-x prompt (and elsewhere), show completions as you type
M-x iswitchb-mode Show all buffer names when you switch buffers with C-x b

 

    如果对一个mode不熟悉,可以通过使用‘C-h m’来查看说明;

    总结一下:emacs编辑的主要原理是buffer的多编辑;文件是将buffer中的内容重定向到一个输出;而不同的buffer可能对应不同的mode,方便编辑使用;其他的概念都是一些界面上名字或者键盘命令而已;

    f.选定的编辑区

    在emacs中默认的所有编辑键盘命令都是针对整个 buffer中的文本的,但是有些时候我们只是希望在特定的区域里进行删除,查找和其他编辑工作。所以emacs提供了键盘操作中的选定。

    首先谈一下Mark:标记意思就是你可以很轻松的回到你原来标记过的位置。想象一下你在浏览一篇10000字的英文论文,突然想看一下第800页的原理是怎么实现的,回到第800页,当你终于搞懂了一切的时候,突然忘记了自己是从哪里过来的,所以一页一页的开始翻,之前的好心情都没了。。。emacs提供了标记功能可以帮你记住至少16个之前的标记位置。你可以在论文中来回倒腾16次而不乱。但是话说回来10000字的论文如果有超过16个原理你都不懂,那么你还是不要用emacs了。

‘C-<spac>’用来标记位置;‘C-x C-x’用来回到起始位置(这里是指的最后一次标记位置)。如果想要回到倒数第二次,或者倒数第15次标记位置:‘C-u C-<spac>’;Mark ring存储区:是用来存放标记的。这里注意:在Mac中‘C-<spac>’默认为修改输入法,所以需要用前面类似的方式来进行修改;

    实际上emacs的Mark还有一个功能:region也就是选定编辑区,这里说明一个概念,point指的是光标所在的位置

    选定Mark之后,移动光标的point位置,就会看到编辑区被高亮,然后可以进行相关的编辑工作;

    

    g.与常用工具的集成

    这里就会有一些专门的工具来配合emacs使用:

    ‘M-x shell’;  ‘M-x gdb’;   ‘M-x compile’;   ‘M-x grep’;   ‘M-x man’;  ‘M-x caculator’;  ‘M-x calendar’; ‘M-x phases-of-moon’;

3.在Emacs中实现渐进式搜索

    到这里,基本上关于emacs的基本情况和使用,已经有一个了解了。当然这只是没有elisp插件的简单纯emacs操作。

    ‘C-s +what to search’用来进行查找;

 

4.后续

以上的3章内容都是查看官网的文档以及Google到的。这是一个关于基本使用比较详细的介绍

后续的学习应该是1.在熟练使用emacs基本功能的前提下补充一下细节,2.结合其他软件比如org以及对于配置文件(模仿高手)的使用和学习,顺带学习RedditGitHubEmacsWiki

开源社区的大门逐渐打开了;

        

     

 

    

posted @ 2017-09-19 15:15  HaotianMichael  阅读(1241)  评论(0编辑  收藏  举报