Emacs未入门学习笔记

龙之吻—水货

2018-10-02 18:23:33

Tech. & Eng.

前言

很早就听说了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,这里不作过多叙述。

选择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/t/emacs/7817

......

Emacs的安装

Emacs有Linux,Windows,MacOS三种版本的,在官网上都可以找到包子,并且有详细的安装说明。

不过在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

以上分别为Emacs的图形界面与终端模式。

Emacs的设置

所有Emacs的设置都可以通过配置文件完成,这里只特别说一下字体和theme的设置。

Options下的Set Default Fond即可调整字体,Save Options即可保存调整。

如果你觉得Emacs自带的界面并不好看,可以试试Emacs自带的一些其他themes,在Options下的Customize EmacsCustom Themes中有不少可供选择的themes,我比较喜欢其中的wombat,如果需要保存的话只需要点击那个Save Setting Themes即可。

Emacs的一些基本概念

buffer

buffer也就是所谓的缓冲区,也就是Emacs中的个个“窗口”,我们对文件的操作都是在buffer上完成的。

至于Emacs真正的窗口,实际上被称为frame,而buffer是frame的一部分,一个frame中可能有许多buffer,下图显示的就是一整个frame。

其中,Mini Buffer是用来完成各种命令以及显示各种提示的,在Mini Buffer中可以利用Tab进行自动补全,如果有多个选择的话则会Emacs列出一张单子供选择。

快捷键

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 : 

之后在那里输入你要打开的文档的地址即可,比如说 :

Find File : ~/work/1.cpp

就是打开在~/work/下一个叫1.cpp的文档,如果之前有这个文档,则会直接打开;

否则,Emacs会提示你打开了一个New File

在这两种情况下都可以进行编写,不过在前者保存后会改变原文档,后者则会把这个文档新建出来。

保存文档

C-x + C-s,当然你也可以直接用图形界面上的保存摁钮,不过那样效率会低不少。

如果你的文档发生改变后保存,会出现 :

否则会出现一下说明,说明文档不用进行保存。

剪切、复制、粘贴

在大部分编辑器上剪切、复制、粘贴分别是C-xC-cC-v

不过Emacs有所不同,剪切、复制、粘贴分别是C-wM-wC-y

在刚用的Emacs的时候可能会有些不适应,但用几天就好了。

有兴趣的话可以去查一查Emacs为什么要这样定义快捷键。

如果实在讨厌这些快捷键的话,Emacs也提供了使用C-xC-cC-v的方法,就是Options下的Use CUA Keys

全选

C-x + h

分屏

C-x + 1只保留当前屏幕,删除其他屏幕。

C-x + 2C-x + 3分别是横向纵向分屏。

Undo

C-/C-_C-x u

附上一张图:

这些就是在我用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下都可以的)之后就可以开始写配置文件了。

附上我的考场用配置文件 :

(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

并回车即可。

只要你不关闭Emacs这句话就会被记下,以后如果编译同一份文件直接F7+回车即可。

更贴心的是,如果你出现了编译错误,Emacs会为你显示编译错误,点击后就可以直接到错误的行处。

如果成功,则会显示 :

shell

shell可以看作是在Emacs中运行的命令行(而且它和命令行长的一样),你可以直接在shell中用相应的命令(什么系统用什么系统的命令),进入当前文件夹,运行刚刚编译完的程序。

由于这是Windows下Emacs的shell,所以就和Windows的命令行长得一样。

如果在这里程序出现了死循环,C-c C-c即可停止运行。

使用Emacs的shell和系统自带终端的感觉是截然不同的,使用Emacs的shell可以使用Emacs的快捷键以及插件,操作要远比终端上便捷。

对于编译和运行,我已经实现了附带一键编译和运行的配置文件,不过理解需要一些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调试的图片: 看起来很好,不是吗?

当然,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 (强烈推荐,十分详细的指南)

【程序猿助手】Emacs,最强的编辑器,之间的不

Emacs学习笔记(2): 初识Emacs