这些都有点不太直接,我们将其重新绑定到更快的按键上:
如果我们有两个window,有时我们想切换左右或者上下window里面的内容,就可以通过以下脚本:
我们经常会修改配置文件,一种让配置生效的方法是关闭Emacs,然后重新打开它。不过这也太慢了,如果不是到了迫不得已的情况,我们不需要如此大动干戈来使我们的修改生效。
我们在很多人的博客中都会看到一种方法,M-xeval-buffer,嗯,(eval-buffer)可以重新解释运行一遍当前buffer的内容。在挺多时候还是挺有用的。
不过我们有时候仅仅只是修改了一小段配置,完全没有必要eval整个buffer。于是我们就可以eval一个局部。
Emacs使用Client/Server可以大大提高新Emacs的开启速度,所有的client共用server来处理数据。
首先添加一个开机启动,这个会启动一个EmacsDaemon进程。可以让其他emacsclient连接到server来编辑。
emacs--daemon
编辑~/.bashrc,加上
12aliasec='emacsclient-t-a=""'aliasse='SUDO_EDITOR="emacsclient-t"sudo-e'然后,就可以通过ecfilename来用emacs编辑文件。即使是有大量配置文件,开启速度也绝对不亚于Vim。因为client不加载任何配置,只是直接连到server。
修改快捷方式的的command为
1emacsclient-c-a=""不过,我觉得Desktop的Emacs不需要连接Daemon,因为Desktop的Emacs只需要开一次就好了。Daemon会有一些奇葩的问题,例如session似乎就没法保存。
使用Daemon主要是为了提高开启速度,这个在Terminal中经常开关Emacs编辑文件时就很重要。而在Desktop就开一次的情况就显得没什么了。
开始录制宏,用C-x(;结束录制宏,用C-x);
用C-xe来使用宏。可以利用C-u来重复使用100次这个宏,即命令C-u100C-xe。C-xeee...将宏重复。
Helm可以方便地帮助我们找到想要的buffer、文件。而且看上去也很酷。
smex提供了更好的M-x体验。它让M-x变成了像ido一样,可以实时提供补全。让M-x更加快速。
Emacs的undo非常诡异,只有undo,没有redo。如果要redo,那只有undoundo。
不过这样的设计,让Emacs的撤销变得异常强大。Emacs可以帮你所有的修改记录都保存下来,我们可以肆意地修改、undo完修改,各种修改,我们都可以回到曾经的状态。这个是其他编辑器难以做到的。
undo-tree可以将所有的状态用树状结构绘制出来。然后我们轻松地可以找到我们需要的状态,甚至可以diff不同的状态。
还有些比较好用的:
就可以显示当前项目名,当前编辑文件的完整路径。
没错,不像Vim里面直接setnu就可以开启行号,Emacs的行号还需要装个插件来实现。不过庆幸的是,Emacs22之后都自带了linum插件,只要启用就可以有行号了。
不过我还是比较喜欢自己定制。
eshell是用lisp实现的shell,具有跨平台、支持tramp、与Emacs水乳交融等等优点。
对于如此常用的功能,我们赶紧绑定一个好用快捷键:
(global-set-key[f4]'eshell)
我们可以在lisp中定义alias,也可以专门为eshell定义alias。
TRAMP的全写为:TransparentRemote(file)Access,MultipleProtocol。在TRAMP的帮助下,我们可以很容易做到无缝编辑远程文件。
dired是Emacs自带的文件管理系统,能够和Tramp无缝配合使用。
默认的dired看上去显示太多东西了,我们可以通过dired的扩展来定制我们需要显示的东西。
我们用el-get很容易就安装好dired扩展"dired-details"和"dired-details+"。然后就可以定制dired显示内容了。默认会隐藏掉不那么常用的信息。如下:
当按下)就可以显示详细信息了。
dired最强大之处,在于可以直接修改这个buffer里面的内容就可以直接对文件进行修改了,就可以很方便地批量重命名。我们按C-xC-q(dired-toggle-read-only)进入Wdiredmode编辑模式,然后就可以像平时编辑文本一样编辑这个buffer,当完成后按C-cC-c(wdired-finish-edit)保存到磁盘,就可以完成批量修改文件名了。
有时候Emacs的插件会出现各种问题,我们就需要进行调试了。
如果我们希望在出现错误的时候能够自动进入调试模式,那我们可以M-xtoggle-debug-on-error。
如果有时候Emacs卡住没有反应,但是按C-g能够恢复的话,那说明可能是进入了死循环。我们可以在之前打开M-xtoggle-debug-on-quit,然后在我们按C-g的时候就可以调试当前正在运行的elisp。
那有时候我们需要在某个elisp函数设置断点的话,我们可以通过M-xdebug-on-entry[funcname]来为某个函数设置断点。取消断点可以通过M-xcancel-debug-on-entry。
在我们进入调试模式的时候,按d可以单步,q退出,e执行lisp。
Yasnippet是一个非常强大的模板替换扩展,可以轻松自己定制模板,而且模板还可以嵌入lisp进行逻辑处理,非常强大。
作为一个Python程序员,拥有一个好用的Python开发环境是非常的重要的。
相信大家在网上找到的EmacsPythonIDE搭建靠的都是PyMacs和Rope。Rope是一个很强的库,不仅可以用来补全,还可以用来重构等等。
Emacs本来就是一个很好的elisp开发环境。不过Lisp里面的括号非常非常多,很容易就被搞晕了,一个有效的括号高亮显得非常重要。
如果在使用Emacs的过程中遇到什么问题,可以求助于Emacs强大的帮助系统。
打开Emacs的入门教程,
让Emacs告诉你某个快捷键是什么作用。首先按下C-hk,然后按下我们的快捷键。就可以打开帮助了,于此同时,我们还可以看到我们的按键的是如何表示的。
查看按键绑定
注意这次是大写的K。对于Emacs的一些内部命令,除了Elisp源代码中提供的文档以外,还有一个专门的Info文档进行了系统的介绍。C-hK就是定位到Info文档中描述该命令的位置。
查看某个函数的文档。建议绑定一个快捷键,这样我们把光标放到某个函数的上面,一按快捷键就可以打开这个函数的文档了。
查看某个变量的文档。
当开当前mode的帮助。这里挺详细的对于当前可用快捷键的描述。
当我们不能完整记得某些快捷键的时候,可以按下前缀后,再按下C-h。就可以看到以这个前缀开始的快捷键有哪些。
有些时候我们只知道一个关键字,这个时候可以用C-ha来通过正则表达式来查找命令名。Emacs会列出所有匹配的命令以及一个简短的文档,并可以通过点击链接定位到该命令的详细文档。
当然还有很多很多,就不再列了。
在英文版的系统里面,一般情况下Emacs可能打不开中文输入法,此时我们需要修改LC_CTYPE环境变量就好了。
可以在~/.profile最后加上一句
我们去到我们的el配置文件目录,打开dired,然后输入%m来调用dired-mark-files-regexp,然后输入.el来标记所有的配置文件,然后按B调用dired-do-byte-compile,然后就可以把一个目录下面的el一次性编译成elc。或者也可以直接C-u0M-xbyte-recompile-directory一次性编译一个目录及其子目录。
如果你阅读到了这里,非常感谢你的耐心,感谢你看完了我如此长篇的唠叨。祝你在2013年效率大大提高~
最后,我也不想挑起Vim和Emacs无谓的口水战。其实无论是Vim还是Emacs,它的好用程度完全取决于使用者的配置能力,所以好不好用,完全看个人。