[翻译]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来捐赠.