本文最近一次更新于 5 年 4 个月前,其中的内容很可能已经有所发展或是发生改变。
简介
Spacemacs是一份Emacs的配置文件,将Vim的快捷键移植到了 Emacs 上,可以提供 Vimer 至 Emacs 的无缝衔接。有了 Spacemacs,你不需要花那么多时间去学习 Emacs 就可以真正用 Spacemacs 开始做一些事情。
安装
$ mv ~/.emacs.d ~/.emacs.d.bak
$ git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
$ emacsClone 至本地后,第一次使用 Spacemacs 时要加载一些 Package,以及根据你的喜好所生成的配置,建议一路回车。
此时会加载很多的 Package,如果没有挂代理的话,就会很慢很慢,可以采用emacs-china的配置源。
快捷键
Spacemacs 基本使用的是原生 Vim 的快捷键,此前请先熟悉 Vim 的操作。我这里只贴出个人认为比较常用的快捷键。
配置文件
快速打开配置文件
同步配置文件
退出 Emacs
重启 Emacs
文件管理
打开文件
neotree 方式显示文件路径
搜索当前文件(需安装 ivy layer)
另一种搜索文件的姿势(需将光标置于需搜索的单词处)
- 下一个匹配
- 前一个匹配
- 改变范围:当前屏幕,当前函数,当前 buffer
- 编辑所有匹配(类似于替换)
- 在当前 project 搜索
清除搜索高亮
重命名当前文件
使用 sudo 来编辑文件(当某些文件的权限是只读的时候)
删除当前文件
打开最近文件列表(需安装 ivy layer)
复制当前文件的绝对路径
复制文件
buffer 管理
显示已经打开的 buffer
关闭当前 buffer
进入 Spacemacs 初始界面
新建一个 buffer
从自动备份的文件中恢复
复制整个 buffer 的内容
将剪贴板的内容粘贴到整个 buffer
切换至上一个 buffer
窗口管理
跳转至第 n 号窗口
跳转至 neotree 侧边栏
当前窗口最大化
或 水平分割窗口
或 竖直分割窗口
平衡窗口
删除当前窗口
切换至其他窗口
将当前窗口与其他窗口 黄金分割
project 管理
在当前 project 中查找文件
切换项目
在该项目中搜索字符串
在项目中替换字符串,先输入「匹配」的,再输入「替换」的字符串(我一般不使用这种方式,我用来替换)
缩进代码
自动对齐
美化代码(不适用于所有语言)
shell 操作
打开/关闭 Eshell(需安装 shell layer)
打开其它种类的 Shell
中断操作
输错命令时,可取消该次输入
显示动态行号
将 的值改为 ‘relative
Magit
Spacemacs 中集成了 Git 管理工具,需先安装 git layer。
常用的快捷键:
| git | magit |
|---|---|
| 弹出然后按 | |
| 弹出然后按 | |
| 弹出然后按 |
守护模式
终端使用 以守护模式开启 emacs:
打开 Emacs GUI 打开 命令行 Emacs
当开启守护进程时,点击关闭按钮后进程还是会保留在后台,如果想要彻底关闭 Emacs 可以: 或者
以下是我针对我常用的一些语言做的一些特殊的设置:
C/C++
我没有采用 Spacemacs 提供的 c/c++ layer,而是采用的Irony-Mode,因为原生的 c/c++ layer 自动补全需要 ycmd,而 ycmd 安装配置起来实在太麻烦了。
快捷键
启用 gdb 调试
编译程序
- 默认是用 编译,可以替换成 (这些参数会被记住)
Python
Python 用的 Spacemacs 自带的 python layer,添加了一些参数:
(python :variables
python-enable-yapf-format-on-save t ;; 当保存的时候自动 `yapf' 美化
python-fill-column 80 ;; 开启 80 列的提示
python-sort-imports-on-save t) ;; 当保存的时候自动排序导入的包快捷键
运行当前文件
美化代码
打开 IPython repl
跳转至定义处:
- 在当前窗口跳转至定义处
- 在另一窗口跳转至定义处
- 回到原处
将当前文件发送至 repl:
- 将当前 buffer 发送至 repl
- 将当前 defun 发送至 repl
- 将当前选中内容发送至 repl
JavaScript
我将 JavaScript layer 自带的 repl 换成了 nodejs,自带的不太好用。
(javascript :variables
tern-command '("node" "/home/wincer/.npm-global/bin/tern") ;; 指定 `tern' 的路径
javascript-disable-tern-port-files nil)设置了一些快捷键:(o 开始的默认为用户自定义的)
启动 nodejs repl
将当前 buffer 发送至 repl
将选中内容发送至 repl
将当前行发送至 repl
Scheme
我是在学 sicp 时才用到 Scheme,所以采用的 Scheme 实现是 MIT-Scheme,并将其设置为默认 repl:
快捷键
切换至 repl
评估算式:
- 计算当前 buffer
- 计算最后一个表达式
- 计算当前定义的函数
- 计算当前选中的内容
结语
我的 Spacemacs 配置放在了 GitHub 上,这是地址。
Spacemacs 生存指北
https://blog.itswincer.com/posts/2aa541e6/