我也说说Emacs吧(1) - Emacs和Vi我们都学

好友幻神的《Emacs之魂》正在火热连载中,群里人起哄要给他捧捧场。
作为一个学习Emacs屡败屡战的用户,这个场还是值得捧一下的。至少我是买了HHKB键盘的。。。

从我的键盘说起 - 有模式和无模式

下面是我的HHKB键盘的局部图:

与其他常规的键盘不同,我的键盘的Control键的位置,是常规布局的大小写锁定键的位置。为什么这么布局呢?

我们看看幻神在emacs人界用法中所介绍的emacs最常的快捷键吧:

C-f 后一个字符
C-b 前一个字符
C-p 上一行
C-n 下一行
M-f 后一个单词
M-b 前一个单词
C-a 行首
C-e 行尾
C-v 向下翻一页
M-v 向上翻一页
M-< 到文件开头
M-> 到文件末尾

C-x C-f "find"文件, 即在缓冲区打开/新建一个文件
C-x C-s 保存文件
C-x C-w 使用其他文件名另存为文件
C-x C-v 关闭当前缓冲区文件并打开新文件
C-x i 在当前光标处插入文件
C-x b 新建/切换缓冲区
C-x C-b 显示缓冲区列表
C-x k 关闭当前缓冲区
C-z 挂起emacs
C-x C-c 关闭emacs

其中,C表示Ctrl键,M表示Alt键,C-f表示按住Ctrl然后按f,
C-x C-s表示先按Ctrl+x,再按Ctrl+s,
C-x b表示先按Ctrl+x,再按b。

Ctrl键之常用,可见一斑。
这就引出一个著名的段子:因为emacs中大量使用Ctrl键,而普通键盘的Ctrl键位于小指管但是比较费力的键位下,emacs会导致左手小指容易损伤的段子层出不穷。为了提高效率,改键盘布局是最常用的办法之一。不信您试试,按Caps lock是不是比按Ctrl要容易,手指稍微移动一下就可以了。
另外,emacs对于Alt或者Esc的需求也不少,这两个键也是小指的管辖范围。

有模式和无模式

为什么emacs会如此大量地使用Ctrl和Alt组合键呢?原因很简单,emacs是个无模式的编辑器。相对而言,vi是个有模式的编辑器,分为命令模式和编辑模式。在命令模式下,j是向下移一行,k是向上移一行,h是左移,l是右移,手在基本键位上不动就可以快速移动。
由于命令模式下,大部分键都被当成命令了,输入这些键代表的字符怎么办?这就需要通过i命令,o命令等切换到编辑模式,在编辑模式下,可以正常输入字符。但是,在编辑模式下,大部分命令又没法使用了。使用命令的时候,还需要输入Esc来切回命令模式。

于是,emacs和vi的宗教战争,在有模式和无模式这一战场打了几十年。

emacs lisp和vimscript

做为编辑器圣战的双雄,除了基本功能之外,emacs和vim都有自己的扩展语言:emacs是emacs lisp,而vim是vimscript.
这两门都是不那么现代的语言。emacs lisp没有common lisp那么强大复杂,但是爱好者如云,至今不断有新的粉丝加入进来。而vimscript的爱好者几乎没有,有用perl写vim扩展的,也有用python写vim扩展的。。。

在宗教战争的两个分战场中,lisp占优势,emacs的平台有优势。而在模式之争上,vi的快捷键的优势使得它的用户数相对更多一些。

evil - emacs上模拟vi的模式

那么,emacs和vim真的是一直水火不融地宗教战争下去吗?对于emacs用户来讲,从来不是这样。emacs用户以emacs的可扩展性为武器,开发出了模拟vi模式方案的插件, evil就是其中最流行的一种。
vi用户还有一种有效的输出方式,就是采用leader键,把命令用leader键组合起来。

spacemacs

emacs的插件很多,配置起来也复杂,所以学习使用emacs最好的方式就是借鉴高手已经配好的配置方案。目前,比较流行的方案就是spacemacs.
spacemacs默认使用evil来模拟vi的模式,并且以空格space键作为leader key。

下面是spacemacs的界面抓图:

在默认模式下,输入空格键,就会弹出下一个键代表的命令,例:空格,然后f,显示的界面如下:

spacemacs的安装非常简单,只有一条命令:

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

至此,我们的emacs学习之旅正式开始。我们既学emacs,也学习vi的模式和leader key。同时,我们使用spacemacs,已经为我们默认配好了很多强大的插件,比普通版本要方便。

唯一不足的是,我们学的知识可能比幻神讲得人界方式更多一些,毕竟vi就是学习曲线比较陡的编辑器。但是,只要坚持下来,您会觉得值得的!

时间: 2024-09-22 05:10:30

我也说说Emacs吧(1) - Emacs和Vi我们都学的相关文章

我也说说Emacs吧(2) - Emacs其实就是函数的组合

Emacs本质上是函数的组合 从帮助上看emacs有何不同 Vim和Sublime Text等编辑器,本质上是一个编辑器. 比如我们看看vim的帮助,是这个风格的,比如我要看i命令的帮助: <insert> or i insert <Insert> i Insert text before the cursor [count] times. When using CTRL-O in Insert mode |i_CTRL-O| the count is not supported.

Emacs之魂(四):标识符,符号和变量

Emacs之魂(一):开篇Emacs之魂(二):一分钟学会人界用法Emacs之魂(三):列表,引用和求值策略Emacs之魂(四):标识符,符号和变量Emacs之魂(五):变量的"指针"语义Emacs之魂(六):宏与元编程Emacs之魂(七):变量捕获与卫生宏Emacs之魂(八):反引用与嵌套反引用Emacs之魂(九):读取器宏 1. 符号 上文我们提到了Emacs Lisp是一种Lisp-2, 即同一个符号(symbol)在不同的上下文中,可以分别表示两种不同的值(value): 变量

Emacs常用命令汇总

注意:以下命令中标注的按键,大写的C代表Control,在键盘上通常是Ctrl键,而M代表Meta,在键盘上通常是Alt键,S则代表Shift,在键盘上通常是Shift键,也就是 C Control M Alt S Shift 这三个键在Emacs里通常作为组合键的前导按键使用,也就是说,执行一条命令前可能需要按住这个键不放,比如搜索命令是C-s,要执行这个命令首 先要按住Ctrl键不放,再按下字母s键:而打开文件命令是C-x C-f,要打开文件就必须按下Ctrl键不放,依次按下x和f(当然也可

Ubuntu 安装 Emacs

emacs 目前正式发布的最新版本是 21.4,这个版本在 Ubuntu 下对中文以及中文输入法的支持多少有点问题,所以我们可以考虑从 emacs cvs 仓库中获取最新的 23.x (emacs-unicode-2) 版本,此版本很好的解决了中文显示以及 Gnome 下中文输入法的问题.以下操作基于 Ubuntu 6.10 环境: 1.从 cvs 仓库取出最新源代码: Ubuntop:~$ set CVS_RSH="ssh" ## 如果你使用的是 Bash,使用 export CVS

从 Vim 到 Emacs 到 Evil

半个多月前,缘由 Vim 的一点小需求无法实现,我开始尝试 Emacs.从初窥门径到配置出完全满足我的一切,中途曾一度不可自拔,工作之余.入睡之前都在看 Emacs 的文档资料.发现我的控制欲特别强,不达目的不愿罢休.好在 Emacs 的确是个强大的平台,不负我望,在积累了一定的 elisp 基础之后就很快突破瓶颈,轻松定制出自己的编辑器.折腾 Emacs 就是 "山重水复疑无路,柳暗花明又一村",时而线索终端而疲惫不堪,时而找到突破而满是成就感.总的来说 Emacs 的许多功能都无法

程序员的工作效率:Emacs vs IntelliJ IDEA

我用 Emacs 写了 7 年的 C++ 代码. 4 年前,当我换了工作,开始使用 IntelliJ IDEA 转向 Java 开发.毫无疑问,比起 Emacs,我在 IntelliJ IDEA 上写代码更有效率. 导航 代码好像真的是80%由导航生成,只有20%是实际写作的结果,IntelliJ IDEA的真正亮点所在是导航到代码库.例如,假设你要添加功能到现有的类,即使你对那个类很熟悉,你还是需要检查新代码该放在哪里比较合适,需要添加一 个新的声明吗?还有什么其他的类在使用你现在修改的方法?

如何利用Emacs来调试C++程序_C 语言

俗话说,Emacs是神的编辑器,而Vim是编辑器之神.高手程序员都是用这两样神器进行开发.本人觉得,Emacs之所以厉害,是因为许多在其他编辑器下必须用鼠标点选很多步的操作,在Emacs下都可以通过键盘来完成.大大地节省了你在显示器上找按钮的时间.Emacs在Linux上运行感觉比windows流畅些,用Emacs编辑程序时,手基本不用离开键盘,就可以完成所有的工作.那么今天就让我们看看如何利用Emacs来调试C++程序. 一.安装Emacs和GCC 下载地址:Emacs:http://www.

一个python程序员的emacs配置文件emacs.d分享

前言 越来越多的人使用emacs作为开发工具. 甚至skype,gmail,豆瓣FM都能通过emacs. 作为一个产品开发,肯定使用很多插件,设置一些快捷键来提高开发效率.以前一直使用 prelude,很久之后发现有以下问题:     比如开启python语言支持需要在prelude-modules.el里面把python这样的注释去掉     我不需要支持这么多的语言,也不需要那么多快捷键     aotupair实在太难用了     scss/css模式不好自定义缩进空格数, tab和空格混

Emacs之一键格式化

  格式化源码是很常见的需求,emacs有个indent-region函数用于格式化选定的代码,前提是你处在某个非text mode下,如c-mode或者java-mode之类.如果要格式化整个文件,你需要先选定整个文件(C-x-h),然后调用indent-region(或者 C-M-\ ).两个命令总是麻烦,我们可以定义个函数搞定这一切,并绑定在一个特定键上,实现一键格式化: ;;格式化整个文件函数 (defun indent-whole ()   (interactive)   (inden