Emacs未入门学习笔记

龙之吻—水货

2018-10-02 18:23:33

Personal

# 前言 很早就听说了NOIP要用NOI Linux(有的省早就用了,不过我们省比较菜,18年才用)(Linux是个好东西,~~但NOI Linux...~~),所以站好队就变得十分重要,因为在Windows上,大家大部分都在用Dev-C++(其他神仙也有用VS Code的,但考场不提供),所以基本上考试的时候都用~~辣鸡~~Dev-C++;但是在Linux上就不一样了,NOI Linux上提供了Guide,Emacs,Vim,Anjuta等比Dev-C++高级到不知道哪里去的编辑器(~~鬼得~~Guide不算),于是乎,基房分为了两党Emacs党和Vim党。 然而不幸的是,上一届的学长全部都是Vim党,所也没有人给我讲Emacs,一切只能自己从网上学习,遇到问题也只能自己去找答案...... 现在用了Emacs将近1年,虽然不能说自己已经会用Emacs了,但至少把Emacs用于考场和日常码代码已经足够了,写一篇学习笔记总结一下在日常中比较常用的Emacs操作,纪念一下过去Emacs学习的艰辛,也希望有更多的Emacs党。 # 正文 ## Emacs简介 Emacs,是Editor MACroS(编辑器宏)的缩写,是一款著名的集成开发环境和文本编辑器。 自诞生以来,Emacs演化出了众多分支。当中使用最广泛的两种各自是:1984年由Richard Stallman发起并由他维护至今的GNU Emacs。以及1991年发起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相当的兼容性。 更多关于Emacs,详见[百度百科:Emacs](https://baike.baidu.com/item/emacs/2044183?fr=aladdin),这里不作过多叙述。 ## 选择Emacs的原因 #### 1.Emacs具有极其强大的功能 比如:收发邮件,看视频,上网,管理文件,玩游戏等等 尽管Emacs有许多功能,但是Emacs也不会因此而“样样都会,样样不精”;作为一个文本编辑器,Emacs的能力完全不逊于Vim,基本上Vim能做到的Emacs都可以做到,就像网上的一个段子: > 如果非要说是什么Vim能做到而Emacs做不到的,估计也只有“帮助乌干达的可怜儿童”。 #### 2.Emacs以使用Emacs Lisp扩展自己的功能 换句话说就是Emacs的配置文件由Emacs Lisp完成。 Emacs Lisp是Lisp的一种方言,而Lisp是一种功能及其强大的编程语言,同时,Emacs又是由Lisp编写的,这两点使得再Emacs下实现任何事情成为可能。 了解了Emacs Lisp就可以自己打造自己的Emacs,实现自己所需要的功能,做到“自己动手,丰衣足食”。 至于Emacs的配置功能有多么强大,还可以引用网上一个段子: > 如果你想让一个Emacs党放弃Emacs,就只需要把他的配置文件删干净就可以了。 #### 3.Emacs在OI和ACM中都有提供 在OI和ACM中,只要使用Linux系统,就都会提供Emacs,因此用好Emacs对OI和ACM都有极大的帮助。 #### 4.使用Emacs可以增加面试的通过率 ![](https://emacs-china.org/uploads/default/optimized/2X/0/0fb513c7d1d450be8ead1c995c4ceb0223176272_1_690x349.png) 详见 https://emacs-china.org/t/emacs/7817 #### ...... ## Emacs的安装 Emacs有Linux,Windows,MacOS三种版本的,在[官网](http://www.gnu.org/software/emacs/)上都可以找到包子,并且有详细的安装说明。 不过在Ubuntu上有更简便的方法(似乎官网上并没有说) : ``` sudo apt-get install emacs ``` 这样就可以直接安装Emacs了,在Ubuntu 18.04上的25.几的版本。 ## Emacs的启动 Ubuntu下直接在命令行内输入`emacs`或者点击图标即可。 Windows下启动Emacs需要在Emacs安装目录下的`bin`中找到`emacs.exe`运行,不过这样子运行的Emacs会带一个命令行窗口,还不能关掉,看起来很不舒服;更好的方法是运行Emacs安装目录下的`bin`中的`runemacs.exe`,这样子运行的Emacs不会有那个影响视觉的命令行窗口。 macOS我没有用过,这里不作说明。 另外,Emacs不仅有图形界面,还有终端模式,加入`-nw`命令即可,如在Windows和Ubuntu下: ``` emacs -nw ``` ![](https://cdn.luogu.com.cn/upload/pic/48211.png) 以上分别为Emacs的图形界面与终端模式。 ## Emacs的设置 所有Emacs的设置都可以通过配置文件完成,这里只特别说一下字体和theme的设置。 在`Options`下的`Set Default Fond`即可调整字体,`Save Options`即可保存调整。 如果你觉得Emacs自带的界面并不好看,可以试试Emacs自带的一些其他themes,在`Options`下的`Customize Emacs`的`Custom Themes`中有不少可供选择的themes,我比较喜欢其中的wombat,如果需要保存的话只需要点击那个`Save Setting Themes`即可。 ![](https://cdn.luogu.com.cn/upload/pic/48761.png) ## Emacs的一些基本概念 ### buffer buffer也就是所谓的缓冲区,也就是Emacs中的个个“窗口”,我们对文件的操作都是在buffer上完成的。 至于Emacs真正的窗口,实际上被称为frame,而buffer是frame的一部分,一个frame中可能有许多buffer,下图显示的就是一整个frame。 ![](https://cdn.luogu.com.cn/upload/pic/48240.png) 其中,Mini Buffer是用来完成各种命令以及显示各种提示的,在Mini Buffer中可以利用Tab进行自动补全,如果有多个选择的话则会Emacs列出一张单子供选择。 ![](https://cdn.luogu.com.cn/upload/pic/48762.png) ### 快捷键 C-:Ctrl M-: Alt (实际上是指Meta键,在大多数电脑上是Alt键模仿,在苹果电脑上可以配置为Option键或Command键模仿) S-:Shift RET:Return,也就是回车键。 TAB:Tab ESC:Esc SPC:空格键 DEL:退格键 ### 命令 对Emacs的所有操作都是通过命令实现的,我们可以通过: ``` M-x command-name ``` 来调用这个命令,对于常用的命令,通常会有相应的快捷键(当然也可以自己定义快捷键)。 如果当前这个命令有对应的快捷键,当你通过`M-x`的方式调用这个命令之后,Emacs会提示你可以用某个快捷键代替这个命令。 如果要取消命令的话可以使用`ESC ESC ESC`。 ### 模式 在Emacs中有许多模式,常见的有`c++-mode`,`c-mode`,`pascal-mode`,`Emacs-Lisp-mode`等等 Emacs会根据当前文件的后缀名进入各种模式,当然也可以通过`M-x mode-name`直接进入某种模式。 ## Emacs的常用快捷键 下面,我们就说一说一些常用的命令的快捷键。 ### 打开文档 `C-x` + `C-f`,之后你就会在Emacs最下面的区域(也就是Mini Buffer)看到 : ``` Find File : ``` ![](https://cdn.luogu.com.cn/upload/pic/35353.png ) 之后在那里输入你要打开的文档的地址即可,比如说 : ``` Find File : ~/work/1.cpp ``` 就是打开在`~/work/`下一个叫`1.cpp`的文档,如果之前有这个文档,则会直接打开; 否则,Emacs会提示你打开了一个`New File`。 ![](https://cdn.luogu.com.cn/upload/pic/35352.png ) 在这两种情况下都可以进行编写,不过在前者保存后会改变原文档,后者则会把这个文档新建出来。 ### 保存文档 `C-x` + `C-s`,当然你也可以直接用图形界面上的保存摁钮,不过那样效率会低不少。 如果你的文档发生改变后保存,会出现 : ![](https://cdn.luogu.com.cn/upload/pic/35347.png ) 否则会出现一下说明,说明文档不用进行保存。 ![](https://cdn.luogu.com.cn/upload/pic/35350.png ) ### 剪切、复制、粘贴 在大部分编辑器上剪切、复制、粘贴分别是`C-x`、`C-c`、`C-v`。 不过Emacs有所不同,剪切、复制、粘贴分别是`C-w`、`M-w`、`C-y`。 在刚用的Emacs的时候可能会有些不适应,但用几天就好了。 有兴趣的话可以去查一查Emacs为什么要这样定义快捷键。 如果实在讨厌这些快捷键的话,Emacs也提供了使用`C-x`、`C-c`、`C-v`的方法,就是`Options`下的`Use CUA Keys`。 ### 全选 `C-x` + `h` ### 分屏 `C-x` + `1`只保留当前屏幕,删除其他屏幕。 `C-x` + `2`和`C-x` + `3`分别是横向纵向分屏。 ![](https://cdn.luogu.com.cn/upload/pic/35356.png ) ### Undo `C-/`或`C-_`或`C-x u`。 附上一张图: ![](https://cdn.luogu.com.cn/upload/pic/35346.png ) 这些就是在我用Emacs时很常用的快捷键,平时也几乎不会用到其他的快捷键,在这里就不多说了,如果想知道Emacs的所有基本快捷键的话可以直接看Emacs自带的教程,花一个小时把那个看一下配合上面所说的练习就可以基本掌握Emacs的操作了。至于其他专用的操作,要用到的时候再说吧。 ## Emacs的配置文件 刚用Emacs并不知道还有配置文件这一说,听完学长讲过Vim的配置文件之后,就去网上找了找Emacs的配置文件,然后经过几天的整理,整理出来了一个用于考场的配置文件。 首先说一下Emacs的配置文件名,`.emacs`,你可以在不同的地方建这个文件,不过只有在特定的位置建立这个文件,打开Emacs后才会自动载入位置,其他的只能手动载入,其中一个位置是`~/.emacs`。 在Linux和Windows下都可以通过`Find File : ~/.emacs`直接在~/下建立`.emacs`,至于在Windows下这个`~/`的位置是什么,相信大家可以自己找出来。 ### 载入配置文件 首先`M-x`,之后你就会在Emacs的Mini Buffer看到 : ``` M-x ``` 输入 `load-file` ``` M-x load-file ``` 回车,就会显示 ``` load-file : ``` 在后面写上要载入的配置文件的地址并回车即可。 ### 配置文件 在你要放配置文件的地方新建一个`.emacs`(推荐位置~/.emacs,可以直接暴力`Find File : ~/.emacs`,在Linux与Windows下都可以的)之后就可以开始写配置文件了。 附上我的考场用配置文件 : ```lisp (global-linum-mode t) ;;line num 显示行号 (setq-default indent-tabs-mode nil) ;;将tab转变为空格 (setq c-basic-offset 4) (setq default-tab-width 4) ;;tab width 设置缩进以及tab键 (electric-pair-mode t) (electric-layout-mode t) (electric-indent-mode t) ;;electric pair 括号补全 (show-paren-mode t) ;;show paren 括号配对 (global-hl-line-mode t) ;;high light line 高亮当前行 (global-set-key [f6] 'gdb) ;;摁F6进入gdb调试 (global-set-key [f7] 'compile) ;;摁F7编译 (global-set-key [f8] 'shell) ;;摁F8进入shell ``` 这是比较老的版本,想要附带一键编译与一键运行的可以在后面找到。 特别说一下。 #### tab-width 在打开`.pas`后缀的文件后,Emacs会进入Pascal-mode模式。 在打开`.c`后缀的文件后,Emacs会进入C-mode模式。 在打开`.cpp`后缀的文件后,Emacs会进入C++-mode模式。 Emacs的C++-mode下的缩进似乎是强制性的,所以每写完一行后Emacs都会强制性更改当前行的缩进,Tab键的功能是调整本行的缩进。 尽管Emacs的C++-mode缩进是强制性的,不过到现在我用起来还没有什么不适(对大括号换行的朋友可能不大友好QAQ)。 但是,利用Emacs的这个特点可以全选+tab实现对全文的格式整理。 #### compile 进行完这个配置后摁下F7,最下面会出现 : ``` compile command: ``` 只需要输入 : ``` g++ name.cpp -o name ``` ![](https://cdn.luogu.com.cn/upload/pic/35345.png ) 并回车即可。 只要你不关闭Emacs这句话就会被记下,以后如果编译同一份文件直接`F7`+回车即可。 更贴心的是,如果你出现了编译错误,Emacs会为你显示编译错误,点击后就可以直接到错误的行处。 ![](https://cdn.luogu.com.cn/upload/pic/35354.png ) 如果成功,则会显示 : ![](https://cdn.luogu.com.cn/upload/pic/35348.png ) #### shell shell可以看作是在Emacs中运行的命令行(而且它和命令行长的一样),你可以直接在shell中用相应的命令(什么系统用什么系统的命令),进入当前文件夹,运行刚刚编译完的程序。 ![](https://cdn.luogu.com.cn/upload/pic/35349.png ) 由于这是Windows下Emacs的shell,所以就和Windows的命令行长得一样。 如果在这里程序出现了死循环,`C-c C-c`即可停止运行。 使用Emacs的shell和系统自带终端的感觉是截然不同的,使用Emacs的shell可以使用Emacs的快捷键以及插件,操作要远比终端上便捷。 对于编译和运行,我已经实现了[附带一键编译和运行的配置文件](https://www.luogu.org/blog/Arthas-gray/fu-dai-yi-jian-bian-yi-hu-yun-xing-di-pei-zhi-wen-jian),不过理解需要一些emacs-lisp的基本知识,这里就暂时不说了,有兴趣的话可以去看看,用一用。 #### gdb 现在终于知道怎么用emacs的gdb调试了,总体的感觉还是不错的,毕竟带着图形化的调试界面感觉还是很好的QwQ。 首先保证你编译的时候有加-g。 然后摁下`F6`或者`M-x gdb`,然后不用去管前面那些莫名其妙命令(我曾经试着按照网上的说法去改,但是并没有成功QAQ),把最后的那个换成你要调试的程序,摁下回车,就可以开始调试了! ``` Run gdb (like this): gdb -i=mi 1.exe ``` 但是刚刚进入调试的时候界面可能不会十分友好,我们可以`M-x gdb-many-windows`开启多窗口调试,之后图形化的界面十分友好,只要你看得懂英文就能很好的应用了QwQ;特别说明一下,Emacs的多窗口gdb调试有专门的`input/output`区域,程序的输入要从那里输入。 附上一张来自Emacs官网的gdb调试的图片: ![](http://www.gnu.org/software/emacs/tour/images/gdb.png) 看起来很好,不是吗? 当然,gdb调试命令中的`break`,`print`还是要知道一下的,毕竟在gdb调试的时候Emacs的快捷键还需要特殊去记忆,不如直接使用gdb的命令。 有了这些简单的快捷键配置,Emacs的已经被配置成一个简单的IDE了(但其实和正规IDE比起来还是差了很多),基本上可以用Emacs码代码了。 但是正如题目所说,这只是一份未入门学习笔记,Emacs的功能远远不止于此~~毕竟Emacs是个系统啊~~,Emacs的配置文件也远远不止于此(就比如说我这个蒟蒻的Emacs配置文件已经达到了$6K$,而且还包含了许多好用的插件),这些等到以后再说吧 QAQ (比如说用emacs上网之类的) ## 一些问题及其解决方法 #### Windows下当Emacs中有中文是会特别卡 这是由于中文字体的缘故,将一下代码放入.emacs即可 ``` (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :family "Microsoft Yahei" :size 18))) ``` ## 参考文档: Emacs Tutorial (也就是Emacs自带的快速指南) [Emacs Guided Tour](http://www.gnu.org/software/emacs/tour/) (强烈推荐,十分详细的指南) [【程序猿助手】Emacs,最强的编辑器,之间的不](https://www.cnblogs.com/blfshiye/p/4566900.html) [Emacs学习笔记(2): 初识Emacs](http://www.cnblogs.com/holbrook/archive/2012/02/15/2357335.html)