在linux下编程,有两个编辑器是肯定会听说的,vim和emacs,个人感觉这两个编辑器和IDE比也真是有过之而无不及啊。
我自己先学了emacs,而且用起来很顺手,所以暂时也没学习vim的打算,这里只能说说emacs。
当然不是说vim不好,关于这两个编辑器的口水已经够多了,我只能引用某个大牛的一句话:“emacs有的功能,vim都有,反之亦然。”其实只要能把活漂亮的干完,你喜欢用记事本也可以,不是么?这两个编辑器主要的不同是调用命令的方式,emacs我写在下面,vim写在最后了吧。根据个人喜好挑一个吧。
emacs安装很简单,windows下有安装包,linux下直接用自带的软件管理器找到安装就ok了,比windows还简单。如果用的环境是我之前博客中推荐的cygwin,那么重新运行setup.exe,在更新软件包那一步搜索emacs,然后安装就好了,可以参考g++的安装。
不管装在哪,emacs启动后样子和下面这个图类似:
中间最大那片黑色的是主要的编辑区,图中是emacs启动后的一些帮助,打开一个新文件后编辑区就什么都没有了。这个编辑区的正式名字叫buffer,直译过来就是缓冲区。emacs里面打开多个文件就是打开多个缓冲区。和缓冲区对应的一个概念是window,直译就是窗口了,像下面这个图里面我打开了两个窗口,可以同时查看两个文件:
不同窗口里面的内容可以是不同的缓冲区,也可以是一个缓冲区。如果你喜欢,可以同时开10个8个窗口,效果图:
再下面那条白线是状态栏,一个窗口一个状态栏,里面显示当前buffer的名字,光标所在行号等信息。
最下面那个黑线是minibuffer,迷你缓冲区,这个迷你缓冲区看上去不起眼,但是作用相当之极其大,emacs的所有命令调用都显示在这里面。
介绍到这就该介绍最关键的emacs下面的命令调用了。所有的命令都有名字,比如打开文件是find-file,把当前窗口横着切是split-window-horizontally,竖着切是split-window-vertically,要通过名字调用命令,需要先按下alt+x,这时候minibuffer里面会变成M-x,然后光标停在后面,你就可以输入命令,然后回车执行了。
这些命令很长,虽然你可以输入几个字符然后使用tab键自动补全命令,但是效率还是很低,所幸emacs支持快捷键,比如默认的打开文件的快捷键是C-x C-f,就是先按ctrl+x,然后按ctrl+f。emacs命令通常有两个修饰,C-和M-,C-表示使用ctrl键,M-表示使用alt键,比如上面那个输入命令的命令M-x。有的命令需要按shift,但是没有标示,比如替换的快捷键是M-%,那个百分号是shift+5,所以整个命令就是alt+shift+5 。
比如打开shell的命令:shell,就可以在emacs里面获得一个命令行。有说法说emacs不是编辑器,是一个操作系统,你要是用了这个命令肯定也这么感觉。知道怎样使用命令,你就学会使用emacs了;知道命令的快捷键,你用起emacs来速度那叫一个飞快啊,真的是超级快~
知道怎样使用命令后,剩下的就是要知道emacs里面有哪些命令了,我把和linux编程相关的一些命令的快捷键和一些解释列在下面,其他的,大家用的过程中会发现的:
打开文件:C-x C-f,如果你输入文件名的文件存在,则打开文件;如果不存在,打开一个对应名字的buffer,保存那个buffer会保存一个相应的文件;如果打开的是一个目录,那么会列出目录里面的子目录和文件,和C-x d一个效果按v查看,q退出,n向下,p向上,如果你不知道我再说什么,试一试就知道了,这个用法再查看大型工程的源代码时候特别方便,比如linux内核。
保存文件:C-x C-s,没什么说的,就是把buffer里面的内容保存在对应的文件里面。
添加注释:M-; (alt+分号),特别是某一行有代码,爽死你。
插入一个文件:C-x i,做usaco上面的题目,和查找替换一起使用可以很快的建立一个模板。
查找:C-s
替换:M-%
如果当前只有一个window,从一个buffer跳到另一个buffer:C-x b 查看所有打开的buffer:C-x C-b
横着切窗口:C-x 2 竖着切窗口:C-x 3 除了当前窗口关闭其他所有窗口:C-x 1 关闭当前窗口:C-x 0
从一个window跳到另一个window:C-x o
编译:M-x compile,没有默认快捷键。当然你需要一个Makefile,之后再介绍。
调试:M-x gdb,没有默认快捷键。
关闭emacs:C-x C-c
最后关于emacs要说的是,emacs没默认快捷键的命令,你可以自己设置快捷键;emacs不支持的命令,你可以自己写脚本扩展emacs。这些内容,以后再说了。
想要学vim的朋友,可以看看这个网站点击进入,交互式的在线教程,缺点是没有说怎么打开shell,怎么在里面编译、调试等。
一个工具要用的好,关键就是多练。如果你没有练手的内容,推荐你去usaco上面做题,参考这篇博客的“第一个程序之后”那一小节,点击进入
Reference:
Debra Cameron, James Elliott, Marc Loy, Eric Raymond, Bill Rosenblatt. 《Learning GNU Emacs , third edition》. 2004