Emacs使用

本文介绍如何使用Emacs编辑器进行Clojure编程,包括安装配置步骤、基本操作指南及高级功能,如REPL交互、代码编译和文档查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Emacs来开发Clojure是一个不错的选择

安装

到官网下载最新版本,以Windows为例。
解压zip,运行bin目录中的runemacs.exe文件即可启动emacs。

关闭emacs,下载配置文件,将所有内容解压到C:\Users\your_user_name\AppData\Roaming\.emacs.d目录。再次启动emacs即可。

配置leiningen,以使得支持在emacs中启动REPL。创建文件C:\Users\your_user_name\.lein\profiles.clj,然后添加内容{:user {:plugins [[cider/cider-nrepl “0.8.1”]]}},其实就是给leiningen添加了一个插件cider-nrepl。

快速上手

  1. 在emacs中,编辑行为总是发生在一个buffer中。
  2. C-x b打开了一个minibuffer,你可以输入想要切换的buffer名,然后确定。
  3. 同样的方式,如果在minibuffer中输入了一个不存在的buffer名,那么就会创建一个buffer。
  4. C-x C-f 可以打开一个文件(emacs会创建一个与文件同名的buffer)。
  5. C-x C-s保存buffer到文件。
  6. 创建文件也是同样的方式,只是输入新文件的路径,当你保存时,emacs会创建新文件。

Key Binding和模式

emacs本质上是一个lisp解析器。按键对应了特定的命令,也就是elisp函数。如C-x b绑定到了switch-to-buffer,C-x C-s绑定到了save-file。不仅仅是组合按键,即使是f和a这样的按键也绑定到了一个函数self-insert-command。该函数的功能就是向当前编辑的buffer中添加字符。

你也可以通过输入一个函数名直接执行某个命令。(使用M-x,然后加函数名)。M是meta的意思,在Windows中对应alt键,对应Macs上的option键。

一个emacs模式就是一组key binding和相应函数的集合。一般一种类型文件的编辑会对应一种模式,如果编辑Clojure文件,那么我希望能加载Clojure模式。在Clojure模式下,如C-c C-k可以将当前buffer中的内容加载到REPL然后编译。

emacs模式由主(major)模式和辅(minor)模式组成。Markdown和Clojure都是major模式。当打开一个文件时emacs会自动设置相应的major模式,然而你也可以通过M-x clojure-mode或者M-x major-mode进行设置。同时只能有一种major模式被激活。示意图如下

emacs的模式是通过package发布的,如果你打开一个文件,发现emacs没有加载对应的模式,可以自行安装。

  • M-x package-refresh-contents刷新package列表
  • M-x package-list-packages显示所有可用的package
  • M-x package-install安装package

核心的编辑术语及其按键绑定

Point

这是光标所在,看上去光标是位于一个字母之上的,其实光标的准确位置是位于当前字符和前一个字符的中间。
C-k执行kill-line命令,删除当前行中光标之后的所有字符。
C-/撤销

移动(Movement)

KeysDescription
C-a移动到行首
M-m移动到当前行中第一个非空白字符。
C-e移动到行尾
C-f前移一个字符
C-b后移一个字符
M-f前移一个单词(常用)
M-b后移一个单词(常用)
C-s使用正则表达式在当前buffer中搜索内容。再次点击C-s移动到下个匹配。
C-r同C-s,只是反向搜索
M-<移动到buffer的开始处(注意是左尖括号)
M->移动到buffer的结尾处
M-g g跳转到行

使用Region进行选择

在emacs中,我们不是选择文字,而是创建region。首先C-spc(ctrl-spacebar)进行标记。然后移动光标,那么光标和标记之间的就是一个region。如:
1. M-<调到buffer的开始处。
2. C-spc
3. 点击M-f两次。选中两个词。
4. 点击backspace,删除两个词。

还可以使用region限定操作范围,如:
1. 创建一个region
2. 使用M-x replace-string在region内进行替换操作。

Killing和Kill Ring

Emacs里面把剪切称为kill,kill ring就是剪贴板。不同的地方是,kill ring有历史记录。

KeysDescription
C-wkill一个region
M-w复制region到kill ring
C-y粘贴(yank)
M-y将粘贴的内容替换为kill ring中的上一个内容
M-dkill一个词
C-kkill一行

Editing和Help

KeysDescription
Tab缩进一行
C-j开启新行并缩进,等同于enter然后tab
M-/自动补全

M-|删除光标周围的所有空格和tab
C-h k key-binding|获取一个key-binding的文档
C-h f|获取一个函数的文档

使用Emacs进行Clojure编程

连接REPL

要在Emacs中使用REPL,需要安装一个package,CINDER。如果你使用了上文提供的配置文件,那么cider已经安装好了。然而不管怎样,你总是可以通过M-x package-install安装。

CINDER允许你在Emacs中启动REPL并且提供了相应的按键绑定。首先打开一个Clojure文件,然后执行M-x cider-jack-in打开REPL。Emacs使用了另外一个窗口来打开REPL。
Emacs窗口

关于窗口操作的一些按键:

KeysDescription
C-x o移动光标到另一个窗口
C-x 1仅仅留下当前窗口,关闭其他窗口。注意,该操作没有关闭相应的buffer。
C-x 2在Frame中上下打开窗口
C-x 3在Frame中左右打开窗口
C-x 0删除当前窗口

Clojure buffer的一些按键

KeysDescription
C-c M-n切换到当前buffer的命名空间
C-x C-e对光标前的表达式求值
C-c C-k编译当前buffer
C-c C-d C-d显示当前光标所在符号的文档
M-.和M-,显示当前光标所在符号的源码并返回到当前buffer
C-c C-d C-a在函数名和文档中搜索任意内容

Cinder buffer的一些按键

KeysDescription
C-箭头上,C-箭头下浏览REPL历史输入
C-enter闭合括号并求值

Paredit

paredit是一个minor模式,处理Clojure文件编辑时的一些括号匹配的工作,下面是它的一些按键:

KeysDescription
M-x paredit-mode开关paredit模式
M-(将光标后的表达式用小括号围起来
C-右箭头将光标后表达上的小括号包含范围扩大到下一个表达式
C-左箭头跟上面相反
C-M-f,C-M-b移动光标到括号对的起始/结尾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值