Spacemacs 的配置

*/-->

Spacemacs 的配置

很早之前就听说过 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 中加入大陆的源,就能正常的安装所有依赖的包了:

  1. (defun dotspacemacs/user-init ()
  2. "Initialization function for user code.
  3. It is called immediately after `dotspacemacs/init', before layer configuration
  4. executes.
  5. This function is mostly useful for variables that need to be set
  6. before packages are loaded. If you are unsure, you should try in setting them in
  7. `dotspacemacs/user-config' first."
  8. (setq-default configuration-layer--elpa-archives
  9. '(("gnu" . "http://elpa.emacs-china.org/gnu/")
  10. ("melpa" . "http://elpa.emacs-china.org/melpa/")
  11. ("melpa-stable" . "http://elpa.emacs-china.org/melpa-stable/")
  12. ("marmalade" . "http://elpa.emacs-china.org/marmalade/")
  13. ("org" . "http://elpa.emacs-china.org/org/")
  14. ("SC" . "http://elpa.emacs-china.org/sunrise-commander/")
  15. ("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:

  1. dotspacemacs-configuration-layers
  2. '(
  3. ;; ----------------------------------------------------------------
  4. ;; Example of useful layers you may want to use right away.
  5. ;; Uncomment some layer names and press <SPC f e R> (Vim style) or
  6. ;; <M-m f e R> (Emacs style) to install them.
  7. ;; ----------------------------------------------------------------
  8. ;; -------- standard --------
  9. spacemacs-bootstrap
  10. better-defaults
  11. chinese
  12. helm
  13. (ibuffer :variables ibuffer-group-buffers-by 'projects)
  14. (syntax-checking :variables
  15. syntax-checking-enable-by-default nil
  16. syntax-checking-enable-tooltips nil)
  17. (spell-checking :variables spell-checking-enable-by-default nil)
  18. (auto-completion :variables
  19. auto-completion-enable-sort-by-usage t
  20. auto-completion-enable-snippets-in-popup t
  21. :disabled-for org markdown)
  22. git version-control
  23. (gtags :disabled-for clojure emacs-lisp javascript latex python shell-scripts)
  24. imenu-list
  25. nginx
  26. org graphviz markdown
  27. emacs-lisp
  28. csv
  29. html
  30. javascript
  31. (typescript :variables
  32. typescript-fmt-on-save t
  33. typescript-fmt-tool 'typescript-formatter)
  34. react
  35. python
  36. restclient
  37. sql
  38. (shell :variables
  39. shell-default-shell 'eshell
  40. shell-default-height
  41. shell-default-position 'bottom)
  42. shell-scripts windows-scripts
  43. yaml
  44. osx
  45. )

5 better-editing

对于基础编辑功能的改善,由于之前多年的 emacs 使用,有一些很好用的 package 和常用按键配置是不能少的。

5.1 multiple-cursors

multiple-cursors 应该来说,是 emacs 里面最喜欢的一个功能了。编辑,特别是修改代码的神器。

  1. (defun better-editing/init-multiple-cursors ()
  2. (use-package multiple-cursors
  3. :defer t
  4. :bind* (("C-;" . mc/mark-all-like-this-dwim)
  5. ("C-:" . mc/mark-all-like-this-in-defun-dwim)
  6. ("C->" . mc/mark-next-like-this)
  7. ("C-<" . mc/mark-previous-like-this)
  8. ("C-M->" . mc/skip-to-next-like-this)
  9. ("C-M-<" . mc/skip-to-previous-like-this)
  10. ("C-;" . mc/mark-all-like-this-dwim)
  11. ("C-:" . mc/mark-all-like-this-in-defun-dwim)
  12. ("C-》" . mc/mark-next-like-this)
  13. ("C-《" . mc/mark-previous-like-this)
  14. ("C-M-》" . mc/skip-to-next-like-this)
  15. ("C-M-《" . mc/skip-to-previous-like-this)
  16. ("C-S-<mouse-1>" . mc/add-cursor-on-click)
  17. :map mc/keymap
  18. ("C-|" . mc/vertical-align-with-space)
  19. ("C-_" . undo) ;undo-tree-undo point position wrong.
  20. ("C-—" . undo) ;chinese
  21. ("M-n" . mc/cycle-forward)
  22. ("M-p" . mc/cycle-backward))
  23. :init
  24. (progn
  25. (require 'multiple-cursors)
  26. (setq mc/list-file better-editing/mc-config-file
  27. mc/insert-numbers-default
  28. mc/cycle-looping-behaviour 'stop))
  29. :config
  30. (progn
  31. (defun mc/my-quit ()
  32. "Quit from mark mode."
  33. (interactive)
  34. (mc/keyboard-quit)
  35. (multiple-cursors-mode ))
  36.  
  37. (defun mc/mark-all-symbols-like-this-toggle ()
  38. "Toogle when only one matches!"
  39. (interactive)
  40. (if (or multiple-cursors-mode (region-active-p))
  41. (mc/my-quit)
  42. (mc/mark-all-symbols-like-this)))
  43.  
  44. (defun mc/mark-all-like-this-dwim ()
  45. "Toggle when not using region. When using region, search first,
  46. if only one candidate searched, then quit!"
  47. (interactive)
  48. (if multiple-cursors-mode
  49. (mc/my-quit)
  50. (if (not (region-active-p))
  51. (mc/mark-all-symbols-like-this)
  52. (mc/mark-all-like-this)
  53. (unless multiple-cursors-mode
  54. (mc/my-quit)))))
  55. (defun mc/mark-all-like-this-in-defun-dwim ()
  56. "Like `mc/mark-all-like-this-dwim', but only in defun."
  57. (interactive)
  58. (if multiple-cursors-mode
  59. (mc/my-quit)
  60. (if (not (region-active-p))
  61. (mc/mark-all-symbols-like-this-in-defun)
  62. (mc/mark-all-like-this-in-defun)
  63. (unless multiple-cursors-mode
  64. (mc/my-quit))))))))

特别是配合一些其他的包,比如 number:

  1. (defun better-editing/init-number ()
  2. (use-package number
  3. :defer t
  4. :commands mc/number/add mc/number/divide mc/number/multiply
  5. number/add number/sub number/multiply number/divide number/eval
  6. ))

对应于 multiple-cursors 中的命令:

  1. (defmacro better-editing/defun-mc-number-commands (commands)
  2. "Create mc number COMMANDS."
  3. `(progn
  4. ,@(mapcar
  5. (lambda (command)
  6. `(defun ,(intern (concat "mc/" (symbol-name command))) (n)
  7. ,(concat "Multiply-cursors support for " (symbol-name command) ", N default 1.")
  8. (interactive (list (mc//number-read-from-minibuffer)))
  9. (let* ((cmd (lambda () (interactive) (,command n))))
  10. (mc/execute-command-for-all-cursors cmd))))
  11. commands)))
  12.  
  13. (better-editing/defun-mc-number-commands (number/add number/divide number/multiply))

这样就可以使用 mc/insert-numbers 一次插入多个递增的数字:

  1. var| var1
  2. var| -> var2
  3. var| var3

或者 mc/number/add 将所有的数字加上或者减掉一个数字:

  1. var1 var2
  2. var2 -> var3
  3. var3 var4

还有下划线和驼峰的互换:

  1. bar_foo barFoo
  2. bar_foo_tar -> barFooTar
  3. tar_bar tarBar
  1. barFoo bar_foo
  2. barFooTar -> bar_foo_tar
  3. tarBar tar_bar

5.2 smart-tab

可以将大多数的补全和对齐相关的操作全部集中在 tab 键中,当需要补全时就补全,当不需要补全时,退回到原始的设置。

比如 org-mode 中,默认的 tab 键绑定的是 org-cycle 功能。使用 smart-tab 之后,可以在正文中补全、yas-expand,也可以在 headline 中折叠或者打开。

6 未完待续

Date: 2018-12-26 22:32:14

Author: WEN YANG

Created: 2019-01-03 Thu 22:18

Validate

Spacemacs 的配置的更多相关文章

  1. spacemacs怎样配置编辑器显示行号?

    spacemacs配置文件.spacemacs文件中查找dotspacemacs-line-numbers. 默认配置为: dotspacemacs-line-numbers nil 修改为(`rel ...

  2. mac上spacemacs体验小记

    project: blog target: note-of-spacemacs-on-mac.md date: 2016-01-04 status: publish tags: - emacs - s ...

  3. golang module 在 spacemcs 中的配置

    概述 golang 官方的包管理从 1.11 版本就开始支持了, 之前尝试了几次, 效果都不理想, 就一直用 dep 来管理 package. 最近 1.13 版本发布了, 使用 go module ...

  4. spacemacs及python学习-坑之记录

    Table of Contents 1. spacemacs 1.1. .spacemacs 文件 1.2. 项目文件 1.3. open shell windows 1.4. emacs基础 1.4 ...

  5. spacemacs 初始安装报错

    尝试使用emcas的配置文件spacemacs,第一次安装启动时,界面为纯白色,而且在输入完几个配置选项后,报了一个错误 Symbol's value as variable is void 根据官网 ...

  6. some settings for spacemacs golang

    spacemacs 中的 golang配置 spacemacs 中的 golang layer 已经有很多默认的配置了, 但是都是针对在 GOPATH 下的配置. 如果你的项目不再默认 的 GOPAT ...

  7. Ubuntu 14.04 安装配置备忘录

    完全在 Linux 下工作,大概有3年时间了. 之前都是用 Windows, 而把 Linux 装在虚拟机里,现在反过来,把 Windows 装在了虚拟机里,只是因为偶尔还要用网银的缘故. 以我这几年 ...

  8. spacemacs:emacs和vim结合,大杀器。vim党转emacs

    结合本人基础,做下述结论.不一定准确.  基础:  1. vim操作和高级操作,熟悉.使用的spf13-vim.  2. emacs以前学过,但是按键太累,相比vim简直难受.  3. emacs命令 ...

  9. Spacemacs安装

    Spacemacs官网 为什么选择Spacemacs Spacemacs是一个已经配好的Emacs和Vim,正如官网所说的The best editor is neither Emacs nor Vi ...

随机推荐

  1. 关于使用itext转Html为pdf添加css样式的问题

    使用的jar文件 xmlworker-5.5.11.jar itextpdf-5.5.11.jar 下载地址:https://pan.baidu.com/s/1i5AIBvZ 以下为测试代码 pack ...

  2. 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 ...

  3. k8s阅读笔记3-k8s的网络解析

    前言 阅读地址https://rootsongjc.gitbooks.io/kubernetes-handbook/content/concepts/flannel.html k8s客户端的启动 顺序 ...

  4. 前端每日实战:45# 视频演示如何用纯 CSS 创作一个菱形 loader 动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/eKzjqK 可交互视频教程 此视频 ...

  5. Task2.设立计算图并自动计算

    1.numpy和pytorch实现梯度下降法 import numpy as np # N is batch size; N, D_in, H, D_out = 64, 1000, 100, 10 # ...

  6. dede标签大全

    想必很多人对后台不熟悉,并且觉得很难.其实不难,只是你们没有找到合适的方法学习而已!只有找到一个合适的学习方法,不管做什么事情,我想都很容易.学习讲究的是效率,而效率又是由思路决定的.就拿网页制作来说 ...

  7. 5G即将到来!我们需要一部怎样的手机呢?

    随着5G技术研发试验即将于年底宣告完成,也就意味着2019年起,5G商用将会宣布启动,现在OPPO.vivo.小米.华为.一加等众多手机厂商也宣布启动5G计划,这时5G势必会掀起一股新鲜的血液,5G手 ...

  8. php array_diff()函数 语法

    php array_diff()函数 语法 作用:比较两个数组的键值,并返回差集.大理石平台价格表 语法:array_diff(array1,array2,array3...) 参数: 参数 描述 a ...

  9. Linux内核设计与实现 总结笔记(第七章)中断和中断处理

    中断和中断处理 处理器的速度跟外围硬件设备的速度往往不再一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求. 然后专门等待回应的办法,如果专门等待回应,明显太慢.所以等待期间可以处理其他事务, ...

  10. phpjm解密程序,也适用于其他混淆加密的破解

    <?php $file = 'plugin.php'; //要破解的文件 $fp = fopen($file, 'r'); $str = fread($fp, filesize($file)); ...