几个月前开始入手emacs,由于在Mac下所有的快捷键都是全局的,在编辑任何文档的时候都可以使用,所以现在对于emacs下的快捷键已经很熟悉了,而且用emacs搭建了一个C++的小型IDE。使用的挺爽。
寒假即将结束。。决定立下flag从今天开始,了解emacs的原理和细节问题,好在网上有很多教程,不打算写的太细,主要是为了自己能够复习一些比较容易忘记的package用法和emacs的基本操作。这一篇重点查缺补漏一些细节问题。以后的博文也会有一些补充。
Starting!!
1.关于快捷键
prefix key:指的是C-x,C-h, C-c等一些前置的比较常用的按键。这里需要区分一些关于快捷键分类的基本概念:“移动相关“和”基本编辑相关“,不管在那种编辑方式,基本编辑指的是删除,复制粘贴等的基础操作,不过我好像只是掌握了一些基本的移动过相关的快捷键,但是对基本编辑还很是模糊,上手几个月后这种感觉尤为明显,主要体现在emacs写了几百行代码,却由于不知道复制粘贴而只能在另一个OJ的编辑器中重新写一遍。。。
1 在tutorial文档中有对deleting和killing操作的区分,感觉没什么用。主要是为了使用方便: 2 3 4 a.发现一个好用的 C-Del向左删除一个单词 配合C-k C-d基本无敌 而以M做prefix的快捷键真心用不惯 5 6 7 b.对于基础的剪贴复制操作 8 C-Space+鼠标移动进行选中(Mark set), 10 C-w剪贴 11 C-y复制
c.敢于查询建
C-h k 查询快捷键
C-h v 查询变量
C-h f 查询函数
C-h m 查询当前已经激活的Minor Mode
查询窗口直接按”q“就可以退出。
不过这里对于Mac用户有一种比较方便的直接在finder下查看文件的函数:(reveal-in-osx-finder);可以将当前buffer的文件直接在finder中打开,用法也相当简单—— #M-x (reveal-in-osx-finder)#。这样就可以省掉很多直接去在目录下直接找文件并对其进行操作。
/* 这里可以对这个函数绑定一个快捷键: 在一般情况下,用户自主绑定的快捷键用的是: C-c 因此可以:
(global-set-key (kbd "C-c C-f") 'reveal-in-osx-finder)
*/
2.关于elisp
现在感觉还是以基本操作为主,所以也只是对lisp语言有一个基本的认识就可以。
/* lisp是一门函数语言 (+ 2 2 ) (setq my-name "haotianmichael") 定义变量 myname 值为”haotianmichael“ 还可以对一个已经存在的变量或函数定义一个值 一般是t(true)或者-1 (message my-name) 输出变量的值 (defun myfun() (message my-name) 定义函数 ) (myfun()) 执行不带参数的函数 (defun myfun() (intercative) 这句话将该函数定义为交互式的函数,主要体现在可以用emacs中的M-x快捷键来直接调用该函数 (message my-name) 定义函数 ) 对函数进行快捷键的绑定 (global-set-key (kbd "<k1>") 'myfun) 快捷键为k1直接调用该函数 */
3. 关于minor mode和Major Mode
这两个概念还是比较重要的:因为emacs是一个编辑器,所以主要是对文件进行编辑,当然就会遇到很多种不同类型的文件,比如.org .java .c .el等文件类型,每一种不同的语言,之所以不同就是因为不同的语言有鱼一样的语法规则,这是最基本的,除此之外还会有一些支持和快捷键的绑定,语法高亮等。这些不同在emacs下用Major Mode来进行区分。也就是说,在编辑一个文档的时候,emacs只能打开一种MajorMode(除非一个文件有多种格式当然不可能)。但是除此之外的一些细节上的修改,就叫做Minor Mode。比如说对编辑器外观的配置,对基本删除操作,补全操作的设置等。因此emacs在编辑一个文档的时候,却可以打开多个MinorMode。
这里再多一句嘴:对于Mac下的功能键,需要同时按fn + fx才可以使用。
4.关于内置的package系统
再说一句废话:刚开始安装emacs的时候,在~/.emacs.d目录下是什么都没有的,但是当开始编辑文档,就会自动出现一个叫做auto-save-list的目录。在emacsWiKi中的解释为:By default, Emacs automatically saves your changes to a file intermittently. 先记下。以后会定时检查配置中多出来的目录文件,便于更好的理解emacs操作。内置的package系统可以直接在GUI中用Option——>manage emacs packages打开。打开的瞬间会在~/.emcas.d下出现一个elpa目录emacs lisp package archive。用来保存下载的packages。
The1stPackage下载了补全company。在没有下载之前用C-h f搜不到关于company的介绍,但是在用package安装之后就可以搜到company-mode是一个Minormode,并且在modeline中可以看到显示了company(说明MIDELINE中即可以显示Majormode也可以显示Minormode,但也是对于minormode选择性的显示,先这样理解)。说明emacs真的是扩展性很强。
5.关于orgmode
不可思议的是,从一开始接触emacs就不知道如何使用orgmode,似乎非常戏剧化,因为传说这是emacs最有利的利器了。
/* 1.通过加入不同的*来区分不同的headings 2.在*后一定要有一个空格 3.记住几个快捷键: C-tab 对整个文档在三种视图中切换(折叠;打开下一级;打开全部) tab 切换光标所在大纲中的三种视图状态 M-RET 尽管特讨厌使用M键,但是先记住这几个。 C-c C-t 将一个headings变成TODO事件 */
第二遍学习收获还是不少,对很多概念突然一下就清楚了,后续的博文主要还是希望自己能建立起hacking的整个主动过程,熟悉一些网站,从而更好的配置自己的C++环境。