我的emacs实践(持续更新 2020-06-13-2020-06-22)
emacs是一个开源的编辑器,那么它为什么存在,我能怎么使用它,解决什么样的问题呢?
我其实没有什么资格来教别人怎么使用emacs,但是记录一下自己的使用心得,并不是很过分的事情。
我用emacs之前的编辑器
我在大学之前没编程过,编程确实不是什么了不起的技能,只要会一点英语和数学常识就能编了。
大学开始(2014年)用的第一个编辑器是Code::Blocks。是编程入门课的统一IDE。这是一个开源的c++ IDE。我觉得它不好,但是当时用的是windows,找到一个在windows下运行良好的IDE还挺少的,上课规定用,就将就用用呗。大一之后就再也没碰过了。
大二学的语言是javascript,我当时学的非常认真扎实,只可惜这些前es6知识基本都用不上了,我个人也不会用这些乱糟糟的===这种东西。这时候我用的软件一开始是webstorm,我也没觉得这玩意多厉害,还觉得花里胡哨没用。那会react都没出,前端都是一泡浆糊,用啥都是菜。后来换了sublime,也没好多少。
大三接触了很多编程相关的东西,开始用起了atom。不得不说,atom也是个菜,提示高亮跟sublime没有本质区别,优点是比sublime方便装插件。这也是我第一次感受到插件的力量,虽然完全不好用。实习,写python, ETL,做大数据,用了pycharm,让我第一次感到一个好的IDE是多么的感人,注意了jetbrains这家公司,太牛比了。
大四,开始准备找工作,在服务器上用vim写ruby on rails。其实大三开始就在学这个,但是rails知识点太多,我又是为了学而学的,就很僵硬,一直都没怎么学会。工作找了一份写golang的,至今,用的是goland工作,期间也在改emacs。
工作一直用goland,使用至今,emacs不常用,但是还是一直在改,商用IDE毕竟还是有个上限,goland很高了,但是emacs可以更高一点,虽然下限低的多。
使用emacs,不是因为多好用,前期是因为社区大牛都在用,比如松本行弘用了emacs,他在书里还特意推荐了这个编辑器。对于linux爱好者来说,可以代表GNU编辑器也就是emacs了。
后期是因为emacs-china的社区氛围太好了,几个大哥都很厉害,ccls的作者,centaur-emacs的作者,posframe的作者。还有一些比较土的,虽然不怎么帮的上我,但是也挺热心。
我的emacs入门
初学阶段的我,emacs写golang的体验,那是被goland吊起来打。goland光是一个数据库和git插件,就不是emacs浑身解数可比的,现在已经支持了magit的大部分功能,还比emacs+magit好看,一致性强。数据库就不用多说了,我还没用过比它方便开发的软件。
完全是混沌模式入门的我,学emacs卡在哪里了呢?
首先是emacs的破ui,基本是没有ui,一般教程一上来都是调整linum这种非常非常基本的东西,本不应该让用户做的。学习曲线接近没有。
其次是elisp,这玩意就是个垃圾。lisp已经够难用了,elisp还是残废品,简直还不如javascript,跟css难度不相上下。
最后是emacs的生态,原始人一般的org,约等于没有的layout实现,还有c语言实现的本体,简直是史前世界。我真的不懂,他们怎么往emacs的repo里灌那么多c语言的东西的,我用它的原因就是可以改,这么灌代码让我很头疼。
这个东西知识曲线真的就是放屁,如果不是对代码有极大的热情,而且对自己能力很自信,真的别用这个。
emacs基本键位
emacs风格的快捷键,用的最多的,就是Ctrl和Alt了,这也是用户很多rsi的原因(比如RMS,李杀)。不过初学还是用这个比较好,一般我们用C来代表Ctrl,M代表Alt,毕竟快捷键不会用键盘字母开头,不然还怎么打字,一会蹦一个功能的。
教emacs是不会介绍左键右键,菜单栏这种鼠标操作的,编辑代码来说,鼠标操作不是最优的,习惯快捷键比较好。
emacs的初学教程,会教我用C-n C-p这种上下左右操作,但是2020年了,这种初学肯定都是鼠标了,上下左右page up page down也没有慢多少,就教几个必用的就行。
C-s 保存 C-x C-c 退出 C-x C-f 打开文件
记住这三个,我操作emacs就八九不离十了。
emacs最重要的快捷键
除上面之外,还有个最重要的快捷键。
emacs一些人说精髓在于,键盘操作怎么怎么的,在与elisp怎么怎么的。我觉得都不是。
emacs的精髓在于M-x,这是emacs前期提升最重要的快捷键,这个是函数大全,所有emacs的函数都会在这里得到。
elisp是什么
我觉得一开始的话,elisp并不需要学习,只要会用require,或者use-package,从大牛的配置照猫画虎就行。lisp虽然不好写,但是并不是很难读。
编辑简单代码需要什么
单文件编辑
我拿单文件编辑做思考,如何使用在一个文件内写代码。为什么是一个文件,因为一般用vim改改配置,也是在一个文件里的。至少不能比vim差太多吧,不然就用vim去了。
代码高亮
代码高亮是必须的,首先是关键字高亮,然后是函数和变量和字面量,其他特性编程语言之间并不共通。比如有的语言没有类型,有的语言没有模板,有的语言没有继承。
代码补全
代码不补全,不如用txt写代码了。
编辑必备功能
复制粘贴剪切撤回,这几个是编辑必备的。
emacs里做以上的功能
major mode
emacs实现代码高亮,主要用了major mode的概念。当然major mode不止是代码高亮,不过现在还顾不上其他功能。
major mode中文可以叫主模式,这个翻译并不能太帮助理解,所以一般还是叫major mode减少歧义(其实英文也不能帮助理解,叫中文也行)。
major mode是个统称,用的时候是用各自语言的mode。比如编辑ruby用ruby-mode,编辑python用python-mode,编辑c用c-mode。
大部分major mode在打开文件的时候确定。主要按照文件的后缀来分辨是哪个major mode。比如打开.rb就用ruby-mode,打开.py就用python-mode。
如果打开的代码没有高亮,那说明你的emacs还没有支持这个后缀对应到代码的major mode的功能。但是不代表没有major mode,按下C-h m可以查看当前的mode(或者M-x describe-mode)。
company
emacs默认不提供补全,得安装插件,是不是很惊喜?
安装company插件可以提供补全,这是目前emacs唯一补全插件。
基本快捷键
复制 M-w,粘贴C-y,剪切C-w,撤销C-/。四个快捷键,就这么简单。