Spacemacs 的配置
Spacemacs 的配置
*/-->
Spacemacs 的配置
Table of Contents
很早之前就听说过 Spacemacs,并且简单使用了一下,之前有被它的界面和初始化的流畅性震撼过。但是自己尝试去配置时就放弃了,有点复杂,一层一层的 layer,配置一下还会报错。最近一两年,很少有时间折腾 emacs,最近稍微有点时间,想配置一个 vue,于是搜了一下 emacs + vue 相关的,发现 Spacemacs 的配置是最活跃的,经常有很多人在讨论。并且,这个配置出来也已经有一两年的时间了,可以说是经过了市场的验证了。既然这么多人来贡献配置出来的,自然在很多方面是比较成熟的。比单靠自己来配置要节省更多的时间,很多坑可能别人都已经解决。正是抱着这个希望,所以,重新按照教程把 Spacemacs 使用起来了。
1 安利
由于这个是多人参与维护的一个开源配置,功能稳定性还是不错的、界面漂亮、启动速度也很快。最主要的变化是对快捷键的重新定义,原来的快捷键基本上是按照 package 来分组管理的。很多时候,快捷键之间也会有冲突,互相覆盖的情况。Spacemacs 采用独有的分组方式,按照不同的功能类型来分组管理,并用 a-z 字母开头的不同的单词来区分,如 a 代表 applications 应用相关,
b 代表 buffers 相关的功能,等等。
这个其实对于我这种使用 emacs 时间比较长的人来说,反倒是很多按键找不到了,每次要 M-x 去找命令,然后记住快捷键。但使用时间长了之后应该差别不大。
但是,它配合 which-key
之后,给人的感觉还是不错的。原来自己也用过 which-key,但是是用的竖直模式,在右边显示出按键提示,经常出现把这个屏幕都挡住,然后回不去的情况,应该是
which-key 的一个问题吧。但使用 spacemacs 之后,发现可以把这个提示放在 bottom 的,并且再也不会出现把屏幕弄乱的情况了,这个体验要好很多。(当然,其他的配置也可以配置在 bottom,甚至觉得默认就应该修改为 bottom,而不是右边,这个是题外话。)
spacemacs 好的地方在于,自己也可以在这些功能分类里面添加自己认为合适的功能。这一点比原来按照包的方式来分类和管理要合理一些。因为总不至于在别的包的按键 map 里面加其他的功能吧。
另外一个就是 major-mode
的按键,全部使用 C-M-m
来做 leader-key
,这个太好了,有统一的使用体验。不管什么模式,可以按相同的按键来使用 major-mode
里面的功能。
2 安装
这个按照官网的指导来:
https://github.com/syl20bnr/spacemacs
将 github 的代码 clone 下来,放在 ~/.emacs.d 文件夹中即可。
但是启动的时候,大多数情况下会失败。因为大陆是有墙的,连不上 melpa。可以在 ~/.spacemacs.d/init.el 中加入大陆的源,就能正常的安装所有依赖的包了:
- (defun dotspacemacs/user-init ()
- "Initialization function for user code.
- It is called immediately after `dotspacemacs/init', before layer configuration
- executes.
- This function is mostly useful for variables that need to be set
- before packages are loaded. If you are unsure, you should try in setting them in
- `dotspacemacs/user-config' first."
- (setq-default configuration-layer--elpa-archives
- '(("gnu" . "http://elpa.emacs-china.org/gnu/")
- ("melpa" . "http://elpa.emacs-china.org/melpa/")
- ("melpa-stable" . "http://elpa.emacs-china.org/melpa-stable/")
- ("marmalade" . "http://elpa.emacs-china.org/marmalade/")
- ("org" . "http://elpa.emacs-china.org/org/")
- ("SC" . "http://elpa.emacs-china.org/sunrise-commander/")
- ("user42" . "http://elpa.emacs-china.org/user42/"))))
3 layer
Spacemacs 相对于以往的配置,最大的不同就是引入了 layer 这个概念。
layer 是比 package 更高一个层级的抽象。基本上一个 layer 是一个完整的可用的功能集的总称。比如,一个语言 javascript,通常指的是 javascript-mode 的 package。但是实际上,这个包仅仅是提供了语法支持,要想使用得更爽,就需要自动补全,语法检查,跳转等等其他的包的支持。而一个 layer 可能就是所有这些包的配置的一个集合。把所有需要的 package 的配置放在一起,一目了然。
另外,自动补全,语法检查等包,基本上所有的语言都需要,但是所有的语言又不同,全部配置到一起的话,文件内容太多,很多都是不关心的内容。每个语言都单独配置的话,包的基本配置又是相同的,往往每个不同的语言只需要稍微修改或者添加一些功能就可以了。
于是,layer 就可以定义 owner 用于初始化,使用 init-PACKAGE
方法来完成基本的设置,另外,可以使用 post-init-PACKAGE
在不同的 layer 中做一些差异化的定制。这样可以保证跨语言的功能的灵活定制,和可维护性。
4 自带的 layer
Spacemacs 的自带 layer 配置还是相当的丰富的,要求不是很高的时候,大多数只使用自带的 layer
就可以满足了。下面使用了其中的一些自带 layer:
- dotspacemacs-configuration-layers
- '(
- ;; ----------------------------------------------------------------
- ;; Example of useful layers you may want to use right away.
- ;; Uncomment some layer names and press <SPC f e R> (Vim style) or
- ;; <M-m f e R> (Emacs style) to install them.
- ;; ----------------------------------------------------------------
- ;; -------- standard --------
- spacemacs-bootstrap
- better-defaults
- chinese
- helm
- (ibuffer :variables ibuffer-group-buffers-by 'projects)
- (syntax-checking :variables
- syntax-checking-enable-by-default nil
- syntax-checking-enable-tooltips nil)
- (spell-checking :variables spell-checking-enable-by-default nil)
- (auto-completion :variables
- auto-completion-enable-sort-by-usage t
- auto-completion-enable-snippets-in-popup t
- :disabled-for org markdown)
- git version-control
- (gtags :disabled-for clojure emacs-lisp javascript latex python shell-scripts)
- imenu-list
- nginx
- org graphviz markdown
- emacs-lisp
- csv
- html
- javascript
- (typescript :variables
- typescript-fmt-on-save t
- typescript-fmt-tool 'typescript-formatter)
- react
- python
- restclient
- sql
- (shell :variables
- shell-default-shell 'eshell
- shell-default-height
- shell-default-position 'bottom)
- shell-scripts windows-scripts
- yaml
- osx
- )
5 better-editing
对于基础编辑功能的改善,由于之前多年的 emacs 使用,有一些很好用的 package 和常用按键配置是不能少的。
5.1 multiple-cursors
multiple-cursors 应该来说,是 emacs 里面最喜欢的一个功能了。编辑,特别是修改代码的神器。
- (defun better-editing/init-multiple-cursors ()
- (use-package multiple-cursors
- :defer t
- :bind* (("C-;" . mc/mark-all-like-this-dwim)
- ("C-:" . mc/mark-all-like-this-in-defun-dwim)
- ("C->" . mc/mark-next-like-this)
- ("C-<" . mc/mark-previous-like-this)
- ("C-M->" . mc/skip-to-next-like-this)
- ("C-M-<" . mc/skip-to-previous-like-this)
- ("C-;" . mc/mark-all-like-this-dwim)
- ("C-:" . mc/mark-all-like-this-in-defun-dwim)
- ("C-》" . mc/mark-next-like-this)
- ("C-《" . mc/mark-previous-like-this)
- ("C-M-》" . mc/skip-to-next-like-this)
- ("C-M-《" . mc/skip-to-previous-like-this)
- ("C-S-<mouse-1>" . mc/add-cursor-on-click)
- :map mc/keymap
- ("C-|" . mc/vertical-align-with-space)
- ("C-_" . undo) ;undo-tree-undo point position wrong.
- ("C-—" . undo) ;chinese
- ("M-n" . mc/cycle-forward)
- ("M-p" . mc/cycle-backward))
- :init
- (progn
- (require 'multiple-cursors)
- (setq mc/list-file better-editing/mc-config-file
- mc/insert-numbers-default
- mc/cycle-looping-behaviour 'stop))
- :config
- (progn
- (defun mc/my-quit ()
- "Quit from mark mode."
- (interactive)
- (mc/keyboard-quit)
- (multiple-cursors-mode ))
- (defun mc/mark-all-symbols-like-this-toggle ()
- "Toogle when only one matches!"
- (interactive)
- (if (or multiple-cursors-mode (region-active-p))
- (mc/my-quit)
- (mc/mark-all-symbols-like-this)))
- (defun mc/mark-all-like-this-dwim ()
- "Toggle when not using region. When using region, search first,
- if only one candidate searched, then quit!"
- (interactive)
- (if multiple-cursors-mode
- (mc/my-quit)
- (if (not (region-active-p))
- (mc/mark-all-symbols-like-this)
- (mc/mark-all-like-this)
- (unless multiple-cursors-mode
- (mc/my-quit)))))
- (defun mc/mark-all-like-this-in-defun-dwim ()
- "Like `mc/mark-all-like-this-dwim', but only in defun."
- (interactive)
- (if multiple-cursors-mode
- (mc/my-quit)
- (if (not (region-active-p))
- (mc/mark-all-symbols-like-this-in-defun)
- (mc/mark-all-like-this-in-defun)
- (unless multiple-cursors-mode
- (mc/my-quit))))))))
特别是配合一些其他的包,比如 number:
- (defun better-editing/init-number ()
- (use-package number
- :defer t
- :commands mc/number/add mc/number/divide mc/number/multiply
- number/add number/sub number/multiply number/divide number/eval
- ))
对应于 multiple-cursors 中的命令:
- (defmacro better-editing/defun-mc-number-commands (commands)
- "Create mc number COMMANDS."
- `(progn
- ,@(mapcar
- (lambda (command)
- `(defun ,(intern (concat "mc/" (symbol-name command))) (n)
- ,(concat "Multiply-cursors support for " (symbol-name command) ", N default 1.")
- (interactive (list (mc//number-read-from-minibuffer)))
- (let* ((cmd (lambda () (interactive) (,command n))))
- (mc/execute-command-for-all-cursors cmd))))
- commands)))
- (better-editing/defun-mc-number-commands (number/add number/divide number/multiply))
这样就可以使用 mc/insert-numbers
一次插入多个递增的数字:
- var| var1
- var| -> var2
- var| var3
或者 mc/number/add
将所有的数字加上或者减掉一个数字:
- var1 var2
- var2 -> var3
- var3 var4
还有下划线和驼峰的互换:
- bar_foo barFoo
- bar_foo_tar -> barFooTar
- tar_bar tarBar
- barFoo bar_foo
- barFooTar -> bar_foo_tar
- tarBar tar_bar
5.2 smart-tab
可以将大多数的补全和对齐相关的操作全部集中在 tab 键中,当需要补全时就补全,当不需要补全时,退回到原始的设置。
比如 org-mode 中,默认的 tab 键绑定的是 org-cycle 功能。使用 smart-tab 之后,可以在正文中补全、yas-expand,也可以在 headline 中折叠或者打开。
6 未完待续
Spacemacs 的配置的更多相关文章
- spacemacs怎样配置编辑器显示行号?
spacemacs配置文件.spacemacs文件中查找dotspacemacs-line-numbers. 默认配置为: dotspacemacs-line-numbers nil 修改为(`rel ...
- mac上spacemacs体验小记
project: blog target: note-of-spacemacs-on-mac.md date: 2016-01-04 status: publish tags: - emacs - s ...
- golang module 在 spacemcs 中的配置
概述 golang 官方的包管理从 1.11 版本就开始支持了, 之前尝试了几次, 效果都不理想, 就一直用 dep 来管理 package. 最近 1.13 版本发布了, 使用 go module ...
- spacemacs及python学习-坑之记录
Table of Contents 1. spacemacs 1.1. .spacemacs 文件 1.2. 项目文件 1.3. open shell windows 1.4. emacs基础 1.4 ...
- spacemacs 初始安装报错
尝试使用emcas的配置文件spacemacs,第一次安装启动时,界面为纯白色,而且在输入完几个配置选项后,报了一个错误 Symbol's value as variable is void 根据官网 ...
- some settings for spacemacs golang
spacemacs 中的 golang配置 spacemacs 中的 golang layer 已经有很多默认的配置了, 但是都是针对在 GOPATH 下的配置. 如果你的项目不再默认 的 GOPAT ...
- Ubuntu 14.04 安装配置备忘录
完全在 Linux 下工作,大概有3年时间了. 之前都是用 Windows, 而把 Linux 装在虚拟机里,现在反过来,把 Windows 装在了虚拟机里,只是因为偶尔还要用网银的缘故. 以我这几年 ...
- spacemacs:emacs和vim结合,大杀器。vim党转emacs
结合本人基础,做下述结论.不一定准确. 基础: 1. vim操作和高级操作,熟悉.使用的spf13-vim. 2. emacs以前学过,但是按键太累,相比vim简直难受. 3. emacs命令 ...
- Spacemacs安装
Spacemacs官网 为什么选择Spacemacs Spacemacs是一个已经配好的Emacs和Vim,正如官网所说的The best editor is neither Emacs nor Vi ...
随机推荐
- 关于使用itext转Html为pdf添加css样式的问题
使用的jar文件 xmlworker-5.5.11.jar itextpdf-5.5.11.jar 下载地址:https://pan.baidu.com/s/1i5AIBvZ 以下为测试代码 pack ...
- 2018-12-25-win10-uwp-显示SVG
title author date CreateTime categories win10 uwp 显示SVG lindexi 2018-12-25 10:37:5 +0800 2018-2-13 1 ...
- k8s阅读笔记3-k8s的网络解析
前言 阅读地址https://rootsongjc.gitbooks.io/kubernetes-handbook/content/concepts/flannel.html k8s客户端的启动 顺序 ...
- 前端每日实战:45# 视频演示如何用纯 CSS 创作一个菱形 loader 动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/eKzjqK 可交互视频教程 此视频 ...
- Task2.设立计算图并自动计算
1.numpy和pytorch实现梯度下降法 import numpy as np # N is batch size; N, D_in, H, D_out = 64, 1000, 100, 10 # ...
- dede标签大全
想必很多人对后台不熟悉,并且觉得很难.其实不难,只是你们没有找到合适的方法学习而已!只有找到一个合适的学习方法,不管做什么事情,我想都很容易.学习讲究的是效率,而效率又是由思路决定的.就拿网页制作来说 ...
- 5G即将到来!我们需要一部怎样的手机呢?
随着5G技术研发试验即将于年底宣告完成,也就意味着2019年起,5G商用将会宣布启动,现在OPPO.vivo.小米.华为.一加等众多手机厂商也宣布启动5G计划,这时5G势必会掀起一股新鲜的血液,5G手 ...
- php array_diff()函数 语法
php array_diff()函数 语法 作用:比较两个数组的键值,并返回差集.大理石平台价格表 语法:array_diff(array1,array2,array3...) 参数: 参数 描述 a ...
- Linux内核设计与实现 总结笔记(第七章)中断和中断处理
中断和中断处理 处理器的速度跟外围硬件设备的速度往往不再一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求. 然后专门等待回应的办法,如果专门等待回应,明显太慢.所以等待期间可以处理其他事务, ...
- phpjm解密程序,也适用于其他混淆加密的破解
<?php $file = 'plugin.php'; //要破解的文件 $fp = fopen($file, 'r'); $str = fread($fp, filesize($file)); ...