Spacemacs 生存指北

Author Avatar
Wincer 9月 26, 2017
  • 在其它设备中阅读本文章

简介

Spacemacs 是一份 Emacs 的配置文件,将 Vim 的快捷键移植到了 Emacs 上,可以提供 Vimer 至 Emacs 的无缝衔接。有了 Spacemacs,你不需要花那么多时间去学习 Emacs 就可以真正用 Spacemacs 开始做一些事情。

安装

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

Clone 至本地后,第一次使用 Spacemacs 时要加载一些 Package,以及根据你的喜好所生成的配置,建议一路回车。

此时会加载很多的 Package,如果没有挂代理的话,就会很慢很慢,可以采用 emacs-china 的配置源。

快捷键

Spacemacs 基本使用的是原生 Vim 的快捷键,此前请先熟悉 Vim 的操作。我这里只贴出个人认为比较常用的快捷键。

配置文件

SPC f e d 快速打开配置文件

SPC f e R 同步配置文件

SPC q q 退出 Emacs

SPC q R 重启 Emacs

文件管理

SPC f f 打开文件

SPC f t neotree 方式显示文件路径

Ctrl s 搜索当前文件(需安装 ivy layer)

* 另一种搜索文件的姿势(需将光标置于需搜索的单词处)

  • n 下一个匹配
  • N/p 前一个匹配
  • r 改变范围:当前屏幕,当前函数,当前 buffer
  • e 编辑所有匹配(类似于替换)
  • / 在当前 project 搜索

SPC s c 清除搜索高亮

SPC f R 重命名当前文件

SPC f E 使用 sudo 来编辑文件(当某些文件的权限是只读的时候)

SPC f D 删除当前文件

SPC f r 打开最近文件列表(需安装 ivy layer)

SPC f y 复制当前文件的绝对路径

SPC f c 复制文件

buffer 管理

SPC b b 显示已经打开的 buffer

SPC b d 关闭当前 buffer

SPC b h 进入 Spacemacs 初始界面

SPC b N 新建一个 buffer

SPC b R 从自动备份的文件中恢复

SPC b Y 复制整个 buffer 的内容

SPC b P 将剪贴板的内容粘贴到整个 buffer

SPC Tab 切换至上一个 buffer

窗口管理

SPC n(number) 跳转至第 n 号窗口

SPC 0 跳转至 neotree 侧边栏

SPC w m 当前窗口最大化

SPC w sSPC w - 水平分割窗口

SPC w vSPC w / 竖直分割窗口

SPC w = 平衡窗口

SPC w d 删除当前窗口

SPC w o 切换至其他窗口

SPC t g 将当前窗口与其他窗口 黄金分割

project 管理

SPC p f 在当前 project 中查找文件

SPC p p 切换项目

SPC / 在该项目中搜索字符串

SPC p R 在项目中替换字符串,先输入「匹配」的,再输入「替换」的字符串(我一般不使用这种方式,我用*来替换)

缩进代码

SPC j = 自动对齐

SPC m = 美化代码(不适用于所有语言)

shell 操作

SPC ' 打开/关闭 Eshell(需安装 shell layer)

SPC a s 打开其它种类的 Shell

中断操作

C g 输错命令时,可取消该次输入

显示动态行号

dotspacemacs-line-numbers 的值改为 ‘relative

Magit

Spacemacs 中集成了 Git 管理工具,需先安装 git layer。

常用的快捷键:

gitmagit
git initSPC g i
git statusSPC g s
git addSPC g s 弹出然后按 s
git add currentfileSPC g
git commitSPC g c c
git pushSPC g P
git logSPC g l l
git checkout xxxSPC gn C
git checkout -- xxxSPC g s 弹出然后按 u
git reset --hard xxxSPC g s 弹出然后按 x

守护模式

终端使用 emacs -daemon 以守护模式开启 emacs:

$ emacsclient -c 打开 Emacs GUI
$ emacsclient -t 打开 命令行 Emacs

当开启守护进程时,点击关闭按钮后进程还是会保留在后台,如果想要彻底关闭 Emacs 可以:SPC q q 或者$ killall emacs

以下是我针对我常用的一些语言做的一些特殊的设置:

C/C++

我没有采用 Spacemacs 提供的 c/c++ layer,而是采用的 Irony-Mode,因为原生的 c/c++ layer 自动补全需要 ycmd,而 ycmd 安装配置起来实在太麻烦了。

快捷键

:gdb 启用 gdb 调试

SPC c C 编译程序

  • 默认是用 cmake 编译,可以替换成 clang/gcc -g main.C -o main (这些参数会被记住)

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)        ;; 当保存的时候自动排序导入的包

快捷键

, c c 运行当前文件

, = 美化代码

, ' 打开 IPython repl

, g 跳转至定义处:

  • , g g 在当前窗口跳转至定义处
  • , g G 在另一窗口跳转至定义处
  • , g b 回到原处

, s 将当前文件发送至 repl:

  • , s b 将当前 buffer 发送至 repl
  • , s f 将当前 defun 发送至 repl
  • , s r 将当前选中内容发送至 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 开始的默认为用户自定义的)

SPC o s i 启动 nodejs repl

SPC o s b 将当前 buffer 发送至 repl

SPC o s r 将选中内容发送至 repl

SPC o s l 将当前行发送至 repl

Scheme

我是在学 sicp 时才用到 Scheme,所以采用的 Scheme 实现是 MIT-Scheme,并将其设置为默认 repl:

快捷键

, ' 切换至 repl

, s 评估算式:

  • , s b 计算当前 buffer
  • , s e 计算最后一个表达式
  • , s f 计算当前定义的函数
  • , s r 计算当前选中的内容

结语

我的 Spacemacs 配置放在了 GitHub 上,这是地址