[翻译]Emacs的prelude READMD文档
Contents
Emacs Prelude
Prelude 是一个Emacs发行版, 旨在加强默认Emacs的体验.Prelude更改了许多默认的配置, 组合捆绑了大量的额外的插件,并添加了它自己的核心库.最终的产品提供了一个对于新手易于使用, 对于高级用户提供了许多额外的能力的Emacs配置.
Prelude 只对 GNU Emacs 24.x 版本兼容.一般地, 我们总是建议你以最新版本的Emacs来运行Prelude - 当前最新版本为 24.4.
目录
快速使用
我们假设你正运行 Unix-like 系统(*BSD, GNU/Linux, OS X, Solaris, 等等), 并且你已经安装了Emacs 24, 也安装好了git以及curl,你可以忽略整个手册, 只需要在你喜欢的shell里输入以下命令:
curl -L https://git.io/epre | sh
你可以启动你的Emacs,坐下来并享受prelude了,忘记这份手册的剩余部分.
这时有两人个环境变量你可以用于控制源码仓库以及安装目录.为了改变安装目录, 你可以:
export PRELUDE_INSTALL_DIR="$HOME/.emacs.d" && curl -L https://github.com/bbatsov/prelude/raw/master/utils/installer.sh | sh
为了改变源码仓库为, 你可以:
export PRELUDE_URL="https://github.com/yourname/prelude.git" && curl -L https://github.com/bbatsov/prelude/raw/master/utils/installer.sh | sh
注意,安装包会备份任何在 .emacs 文件或 .emacs.d 目录,然后它会解压Prelude的代码到.emacs.d 目录里.如果你打算手动安装, 请确保你没有.emacs文件或者手动备份你已经存在的.emacs.d 目录.
一旦你安装完成后,不要忘记去调整你的prelude-modules.el文件.默认情况下, 许多prelude自带的模块并没有加载.
安装 Emacs 24
好明显, 你使用 Emacs Prelude 之前, 你首先得安装 Emacs 24 . 请看 WikEmacs articles on installing Emacs
安装(Prelude)
自动化安装
你可以通过命令行使用curl 或者wget来安装Emacs Prelude.自然地,git也是要安装好的.
通过 curl 安装
如果你打算用curl, 请在shell里输入以下命令:
curl -L https://github.com/bbatsov/prelude/raw/master/utils/installer.sh | sh
通过 Wget 安装
如果你打算使用 wget, 请在shell里输入以下命令:
wget --no-check-certificate https://github.com/bbatsov/prelude/raw/master/utils/installer.sh -O - | sh
手动安装
git clone git://github.com/bbatsov/prelude.git path/to/local/repo
ln -s path/to/local/repo ~/.emacs.d
cd ~/.emacs.d
更新 Prelude
手动更新
更新过程非常简单直接,由3个步骤组成:
更新所有插件包
只需要运行 M-x package-list-packages RET U x
更新Prelude的代码
cd path/to/prelude/installation
git pull
路径path/to/prelude/installation通常是 ~/.emacs.d (在最新的Unix系统下)
重启 Prelude
在你更新完之后,重启一下Emacs通常是一个好的主意.在下次Prelude启动时, 它会安装好新的依赖(如果需要的话).
自动更新
简单地执行M-x prelude,然后重启下Emacs就可以了.
开启额外的模块.
默认情况下,大多数Prelude自带的模块并没有加载.更多关于这些模块提供的功能, 请查这个文档 docs
;;; Uncomment the modules you'd like to use and restart Prelude afterwards
(require 'prelude-c)
;; (require 'prelude-clojure)
;; (require 'prelude-coffee)
;; (require 'prelude-common-lisp)
;; (require 'prelude-css)
(require 'prelude-emacs-lisp)
(require 'prelude-erc)
;; (require 'prelude-erlang)
;; (require 'prelude-elixir)
;; (require 'prelude-haskell)
(require 'prelude-js)
;; (require 'prelude-latex)
(require 'prelude-lisp)
;; (require 'prelude-mediawiki)
(require 'prelude-org)
(require 'prelude-perl)
;; (require 'prelude-python)
;; (require 'prelude-ruby)
;; (require 'prelude-scala)
(require 'prelude-scheme)
;; (require 'prelude-scss)
;; (require 'prelude-web)
(require 'prelude-xml)
一旦你安装完成后,你可修改你的prelude-modules.el文件.如果你打算手动安装,这时你需要复制 prelude-modules.el 文件(译注: 放到~/.emacs.d/目录下),这个文件在根目录 path/to/prelude/installation 下的 sample 目录里.
你在注释掉一些模块后, 你也应该重启Emacs或者通过C-x C-e来evaluate模块require表达式.(这个不好翻译…)
运行
这没有什么特别的. 像平常一样启动Emacs就可以了.我个人将Emacs运行在一个守护模式:
emacs --daemon
然后,我通过终端或者一个图形客户端连接到服务, 就像这样:
emacsclient -t
emacsclient -c
你可能在你的.zshrc或者.bashrc也设置一些别名:
alias e='emacsclient -t'
alias ec='emacsclient -c'
alias vim='emacsclient -t'
alias vi='emacsclient -t'
如果你通常在命令行使用vi(m)编辑文件, 最后两个别名将非常有用.
你也可以打开一个文件并跳到指定行:
emacsclient somefile:1234
这会打开一个somefile文件,并且将光标定位到第1234行.
开始了解 Prelude
当然,了解Prelude是如何加强默认的Emacs检验的最好的方式就是去精读Prelude的源码.(好明显,是用Emacs Lisp来写的).理解代码不是必修课.Prelude包含了一个prelude-mode次模式, 它是prelude提供的额外的功能的集合.它也提供了些额外的键位映射绑定扩展.
键位映射情况
全局范围的
| 绑定的键位 | 描述 |
|---|---|
| C-x | 根据正则对齐区域 |
| C-+ | 放大字体(text-scale-increase) |
| C– | 缩小字体(text-scale-decrease) |
| C-x 0 | 返回之前的窗口(反转 other-window (C-x o)) |
| C-^ | 将两行合并成一行(prelude-top-join-line)(译注:将当前行与下一行合并到当前行) |
| C-x p | 启动 proced (Emacs进程管理器, 仅在Linux下工作) |
| C-x m | 启动 eshell |
| C-x M-m | 启动你的默认shell |
| C-x C-m | M-x的别名 |
| M-X | 类似 M-x ,但命令只限于当前活动的主模式. |
| C-h A | 运行 apropos (搜索所有Emacs符号) |
| C-h C-m | 显示当前主模式的键位绑定以及描述所有绑定的键位说明 |
| M-/ | 运行 hippie-expand (一个替代默认的dabbrev-expand) |
| C-x C-b | 打开 ibuffer (一个代替默认的buffer-list的东东) |
| F11 | 全屏 |
| F12 | 开启/关闭 Emacs 菜单栏 |
| C-x g | 开启 magit 的状态缓冲区 |
| C-x M-g | 打开 magit 的弹出窗 |
| M-Z | 显示与字符相关的操作的快捷键 |
| C-= | 执行 expand-region(增量文本选择) (译注:对于写代码这个功能非常有用) |
| C-a | 执行 prelude-move-beginning-of-line. 详情请这里 |
Prelude 模式下的
| 绑定的键位 | 描述 |
|---|---|
| C-c o | 用外部程序打开当前访问的文件 |
| C-c i | 搜索符号, 仅在包含代码的缓冲里搜索 |
| C-c g | 用Google搜索光标下的东西(或者一个交互式查询) |
| C-c G | 用Github搜索光标下的东西(或者一个交互式查询) |
| C-c y | 用Youtube搜索光标下的东西(或者一个交互式查询) |
| C-c U | 用Duckduckgo搜索光标下的东西(或者一个交互式查询) |
| C-s RET 或者 Super-o | 在当前行向上一行插入一个空行并适当进行缩进 |
| S-RET 或者 M-o | 插入一个空行并适当缩进 |
| C-S-up 或者 M-S-up | 将当前行或区域向上移(注意S是大写) |
| C-S-down 或者 M-S-down | 将当前行或区域向下移(注意S是大写 |
| C-c n | 修正缩进及去掉空白 |
| C-c f | 打开最近访问的文件 |
| C-M- | 缩进区块(如果有选择的话)或者整个缓冲区 |
| C-c u | 根据URL,打开一个新的缓冲区来打开该URL |
| C-c e | 计算 Emacs Lisp 代码表达式,并用结果来替换 |
| C-c s | 切换两个活动窗口 |
| C-c D | 删除当前文件及缓冲区 |
| C-c d | 复制当前行(或区块)到下一行 |
| C-c M-d | 复制当前行(或区块)到下一行并注释掉 |
| C-c r | 重命名当前的缓冲区以及它正在访问的文件 |
| C-c t | 打开一个终端模拟器(ansi-term) |
| C-c k | 关闭所有缓冲区除了你当前正在使用的 |
| C-c TAB | 缩进并复制区块到粘贴板 |
| C-c I | 打开用户的 init 文件(即 prelude/personal/preload 目录) |
| C-c S | 打开 shell 的 init 文件 即 ~/.bashrc 或 ~/.zshrc |
| C-c . + | 将当前数字加1 |
| C-c . - | 将当前数字减1 |
| C-c . * | 将当前数字*2 |
| C-c . / | 将当前数字/2 |
| C-c . | 将当前数字取模, %2 |
| C-c . ^ | 将当前数字进行平方 ^2 |
| C-c . < | 将当前数字左移 1 个单位, 即*2 |
| C-c . > | 将当前数字右移 1 个单位,即/2 |
| C-c . # | 将当前数字转换为指定基数的数字. 默认为10 |
| C-c . % | 将当前数字用另一个数字来替换 |
| C-c . ‘ | 将当前数字用数学操作符来操作 |
| Super-g | 开启或关闭 God 模式 |
| Super-r | 最近的文件 |
| Super-j | 合并行 |
| Super-k | 删除整行 |
| Super-m m | magit 状态 |
| Super-m l | magit 日志 |
| Super-m f | magit 文件日志 |
| Super-m b | magit blame 模式 |
注意: 对于各种算术运算符, 前缀操作符 C-c . , 仅需要同时按一次. 剩下部分的操作符, 适当按下就可以了.
OS X 修改键位
Prelude 默认情况下不弄乱标准的键位映射 Command (就是 Super), Option 就是Meta.
如果你想互换它们, 请添加以下配置到你的个人配置文件里:
(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'super)
Projectile
这些是 Projectile 提供的功能
| 绑定的键位 | 描述 |
|---|---|
| C-c p f | 显示项目里文件列表.带有前缀参数, 将会首先清空缓存 (这个命令非常好用) |
| C-c p d | 显示项目里目录列表.带有前缀参数, 将会首先清空缓存 |
| C-c p T | 显示项目里所有测试文件列表 |
| C-c p s g | 对项目进行执行 grep (相当于全文搜索) |
| M– C-c p s g | 在项目里执行 projectile-grep-default-files |
| C-c p b | 显示当前项目里所有已经打开到缓冲区的文件列表 |
| C-c p o | 对所有项目打开的缓冲区执行 multi-occur |
| C-c p r | 对项目里所有的项目文件执行 query-replace |
| C-c p i | 使用项目的缓存失效(如果存在的话) |
| C-c p R | 对项目重新生成 TAGS 文件 |
| C-c p k | 删除所有项目的缓冲区 |
| C-c p D | 在 dired 模式打开项目的根目录 |
| C-c p e | 显示所有最近打开过的项目的文件 |
| C-c p s a | 对项目执行 ack.需要有 ack-and-a-half |
| C-c p s s | 对项目执行 ag. 需要有 ag.el |
| C-c p a | 对项目执行 ack. 需要有 ack-and-a-half |
| C-c p c | 对项目执行标准的编译命令 |
| C-c p P | 对项目执行标准的测试命令 |
| C-c p z | 添加当前访问的文件到缓存 |
| C-c p p | 显示所有你可以切换的项目 |
Prelude 提供了一个额外的键位前缀 S-p (S 代表 Super), 所以, 你也可以使用 S-p 来代替 C-c p
如果你有时忘记了任何项目的键位绑定情况, 只需要输入:
C-c p C-h
Helm
Helm 的设置是根据这个指引的 A Package in a league of its own: Helm..
你可以根据以下的指导来学习Helm的用法和按键绑定情况. C-c h 是 Prelude 对 Helm 默认的按键前缀. 如果你不记得任何的按键, 在 C-c h 之后再加上 C-h 就可以列所所有关于 Helm 的所有绑定的按键的情况.
如果你喜欢 Helm 并且想全局上使用 Helm 通过 helm-find-files, helm-buffer-lists… 来加强, 这时你加上(require 'prelude-helm-everywhere). 当 prelude-helm-everywhere激活了, Helm 就会开启以下这些全局按键:
| 绑定的键位 | 描述 |
|---|---|
| M-x | 执行 helm-M-x,一个 M-x 的交互版. |
| M-y | 执行 helm-show-kill-ring. 显示 kill-ring的内容 |
| C-x b | 执行 helm-mini, 一个 C-x b 的交互版. |
| C-x C-f | 执行 helm-find-files , 一个 find-file 的交互版 |
| C-h f | 执行 helm-apropos, 一个 apropos-command 的交互版 |
| C-h r | 执行 helm-info-emacs, 一个 info-emacs-manual 的交互版 |
| C-h C-l | 执行 helm-locate-library, 可以搜索所有加载到 emacs 的文件位置 |
以下的按键是在 shell-mode 情况下激活:
| 绑定的键位 | 描述 |
|---|---|
| C-c C-l | 执行 helm-comint-input-ring, 使用helm接口来显示 shell 历史命令 |
以下的按键是在 eshell-mode 情况下激活:
|绑定的键位 | 描述 |
|–: | –: |
| C-c C-l | 执行 helm-eshell-history, 使用helm接口来显示 eshell 历史命令 |
如果你更喜欢在所有地方使用 Ido, 你就不应该添加 prelude-helm-everywhere, 这样你就可以同时使用 Helm和 Ido, 以及 Prelude 的默认按键了.
你总是可以通过 (prelude-global-helm-global-mode-on) 来重新激活 Helm.
注意: 在 helm-M-x, 你必须传递前缀参数在你执行helm-M-x 之后, 因为你的前缀参数将会在helm-M-x显示的模式线上.
helm-M-x之前,是没有效果的.
Key-chords
Key-chords 仅当 prelude-key-chord 模块开启时才可用.
| 绑定的键位 | 描述 |
|---|---|
| jj | 跳到一个单词的开始位置 (avy-goto-word-1) |
| jk | 跳到一个字符(avy-goto-char) |
| jl | 跳到一行的开始(avy-goto-line) |
| JJ | 跳到前一个缓冲区 (prelude-switch-to-previous-buffer) |
| uu | 编辑视图作为树 (undo-tree-visualize) |
| xx | 执行一个外部命令 ( execute-extended-command ) |
| yy | 浏览 kill-ring 内容 ( browser-kill-ring) |
禁用 Key-chords
在一些情况下, 你可能不想要prelude已经定义好的 key-chord 的按键, 这时, 你可以在personal.el文件里通过设置它的命令为nil来禁用这些按键. 例如, 为了禁用jj key-chord, 可以添加以下行到配置文件里:
(key-chord-define-global "jj" nil)
如果你是一个 evil-mode 用户, 你可能也想同时禁用 key-chord-mode:
(key-chord-mode -1)
vim 模拟器
如果你想在emacs里使用vim, 可以启用prelude-evil模块, 它提供了对evil-mode的支持.
自动化包安装
默认情况下, Prelude 安装好后只带最小限度的功能.它也可以在后台自动安装各种编程语言及框架的附加插件.例如: 你试图打开一个.clj文件 clojure-mode, cider以及Prelude的加强版Lisp配置将会自动为你安装.
当然, 你也可以手动安装任何东西.
颜色主题
Emacs 24 自带了一个新的主题服务, 这显式有效地渲染一些老的颜色主题包. Emacs 24 提供了一打内建的主题, 你可以开箱即用, 通过调用 M-x load-theme 命令.
Zenburn是Prelude的默认颜色主题, 但你可以自行修改. 为什么用Zenburn?我(并且世界上许多黑客)发现它相当简洁.个人发现默认的主题容易对眼睛产生厌倦, 这是为什么我决定把有争议的地方替换它. 当然, 你也可以返回默认(或者选择其他颜色主题).
为了禁用 Zenburn 主题, 你可以将以下行放到你个人的配置文件里:
(disable-theme 'zenburn)
或者你可以使用其他主题颜色, 通过添加以下内容到 personal/preload, 像这样:
(setq prelude-theme 'solarized-dark)
注意: Solarized 默认情况下是不可用的. 你可以从MELPA安装它(`M-x package-install RET solarized-theme).
最后, 如果你不想用任何主题, 你可以添加以下内容到你的 personal/preload:
(setq prelude-theme nil)
个性化
fork官方的 Prelude 仓库并添加一些你自己的东西. 你应该避免去修改你个人文件夹之外的东西, 以免在日后升级时带来的冲突问题.
如果你想添加一些自动安装的包到你的个人配置文件, 可以使用以下代码:
(prelude-require-packages '(some-package some-other-package))
如果你只需要单一的包, 你也可以这样子:
(prelude-require-packages 'some-package)
预加载你自己的配置文件
有时, 你想要在 Perlude 加载之前, 加载你自己的配置文件. Prelude 会自动预加载所有在 personal/preload 文件夹下的 Emacs Lisp 文件. 注意, 这意味着你不能使用任何与Prelude相关的东西, 除了几个变量之外, 比如prelude-dir等等.
禁用 whitespace-mode
尽管 whitespace-mode 模式人令人眼前一亮, 但有些人觉得它太过有入侵性.你可以在你的个人配置文件里通过以下代码禁用它:
(setq prelude-whitespace nil)
如果你喜欢 whitespace-mode 但更愿意它不要在你保存文件时自动清除空格, 你可以在你的配置文件里通过设置 prelude-clean-whitespace-on-save 为nil 来禁用这些行为.
(setq prelude-clean-whitespace-on-save nil)
禁用 flyspell-mode
如果你不喜欢, 可以这样子禁用它
(setq prelude-flyspell nil)
注意事项
更新捆绑的包
在执行更新 Prelude 之前, 最好更新一下你已经安装好的包, 因为最新的Prelude通常依赖于捆绑好的包的更新版本.
如果你打算手动更新Prelude, 你总是应该首先执行包更新操作.
M-x package-list-packages RET U x
如果你打算使用 M-x prelude-update, 上步的步骤就不是必须的, 因为它会自动先执行更新包操作.
flyspell-mode 的问题
Prelude 会大量使用 flyspell-mode 来对各种设置进行拼写检查. 这些操作会依赖于你的操作系统中的 aspell 程序以及一个英文字典. 在Mac OS X下, 你可以通过 homebrew 来安装 aspell, 像这样:
brew install aspell --with-lang=en
在Linux发行版, 只需使用你的包管理器来安装即可.
Emacs 的终端版颜色太丑的问题
如果你的Emacs在终端上看上去太丑陋(相对于图形界面版), 可以试下添加以下配置到你的 ~/.bashrc 或者 ~/.zshrc.
export TERM=xterm-256color
然后重新加载下 ~/.bashrc 或 ~/.zshrc 文件, 然后再次启动emacs.
在初始化启动时报 MELPA 错误
如果你发现有一些 HTTP 连接到MELPA错误相关的信息, 只要手动执行 M-x package-refresh-contents , 然后直接重启Emacs即可.
在编辑器缓冲区发现箭头导航的警告
这不是个bug, 而是一个特色. 我坚信唯一使用Emacs的方法是按它的方式来使用(至少相对于导航而言是这样子)
如果你相信这会使你更进一步, 你可以完全禁用箭头导航, 可以在你的配置文件里添加:
(setq guru-warn-only nil)
完全禁用, 可以在你的配置文件里添加以下片段:
(setq prelude-guru nil)
自定义 C-a 的行为
Prelude 覆盖了 C-a 的行为, 描述在这里. 如果你不喜欢, 你可以简单地添加以下代码到你的配置文件里:
(global-set-key [remap move-beginning-of-line]
'move-beginning-of-line)
ido 在大的数据处理里遇到性能问题
Prelude 将ido-fix 与默认的 ido 互换了. flx的排序算法更复杂, 但有着更好的结果. 在一些比较慢的机器下, 它可能需要降低 flx-ido-threshold 的值来确保有比较好的体验.
(setq flx-ido-threshold 1000)
你也可以完全禁止这些排序算法, 像这样:
(flx-ido-mode -1)
Windows 兼容性
理论上 Prelude 应该在 Windows 也可以很好地工作, 我只在 Linux 与 OS X上测试过, 所以Windows时而会有相关的问题. 这种情况可能随着时间的推移而解决 .
已知的问题
checkout 项目的未解决的问题列表. 顺便说下, 随意修复好它,然后发给我一个 pull 请求就好. :-)
技术支持
通过 Prelude的 Google Group 可以得到些技术支持 emacs-prelude@googlegroups.com..
贡献
这有份清单, 列出了所有为 Emacs Prelude 做出过贡献的人
bugs 以及 修正
我们总是欢迎任何提交bugs以及改进的建议. 如果能有 Github 的pull request 就更好了. :-)
我也接受一些赞助, 可以通过 gittip来捐赠.