https://ae01.alicdn.com/kf/HTB1xtvJKXuWBuNjSszb763S7FXas.png

Spacemacs 生存指北 1605 words

本文最近一次更新于 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
$ emacs

Clone 至本地后,第一次使用 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。

常用的快捷键:

gitmagit
弹出然后按
弹出然后按
弹出然后按

守护模式

终端使用 以守护模式开启 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/

作者

Wincer

更新于

Sep 26, 2017

许可协议

CC BY-NC-ND 4.0