一直看Haskell群里的人安利Emacs,于是想试试看到底怎么样。遇到的问题什么的大概都会堆到这里嗯。
安装Emacs
之前也是道听途说Spacemacs
这个Emacs发行版做的非常好,于是就偷懒直接用未修改的spacemacs了(其实是不会改吧。
先到GNU官网弄个Emacs原版,然后把spacemacs配置文件clone到~/.emacs.d/
就行了。
安装Haskell-Mode
spacemacs默认似乎并不带许多语言的支持,所以第一件事当然是要先装上haskell-mode。按照文档一步步来就没问题了。
这么干会被spacemacs无情的删掉!正确的方法请看下面(
待更。
2016.01.31 update
快捷键好多啊orz 而且Evil这货是要我同时背下emacs和vim的快捷键吗!(虽然确实很好用(逃
install custom packages
不同于普通的Emacs直接使用M-x package-install
,spacemacs竟然会自动删掉这样装好的包… 对于一个啥都不懂的新手来说真是无比嘲讽。出现这个问题的原因是因为spacemacs引入了layer的概念(大概相当于文件夹?),不属于任何layer的包会被当作orphan包删掉… 解决办法:
- 不使用layer
不使用layer的方法也是可行的,不过最好还是不要这么干。只需要把包加入配置文件中的dotspacemacs-additional-packages
就好了。大概就是…
1 | (setq dotspacemacs-additional-packages '(<package-1> <package-2> ...)) |
然后可以在dotspacemacs/user-config
里写配置。
- 创建一个自定义layer
比如说我需要装各种haskell插件,于是M-x configuration-layer/create-layer
先创建一个layer,位置在private就好(文档上看似乎只有private是装包能用的,不过git will be ignored是怎么回事…)。之后就会要求给这个layer起个名字,我这里叫Haskell
(然而规范都是小写,好孩子不要学)。
生成好的文件位于~/.emacs.d/private/<layer>
下,结构大概像这样:
1 | [layer-name] |
看不懂也没什么关系… 只需要打开(C-x C-f
)packages.el
修改一下就行了。比如我想要装haskell-mode
,ghc-mod
,structure-haskell-mode
这三个插件,那么就要把这里改成这样:
1 | (setq Haskell-packages |
这样还不算完成配置,还需要为每一个包定义初始化函数。
1 | (defun Haskell/init-haskell-mode () |
这里只用了最简单的use-package
变量,更多的用法可以参考use-package
的文档。快捷键什么的,以后再折腾吧。
配置好以后使用C-x C-s
保存,然后SPC f e R
可以重新加载配置文件,之后emacs就会安装列出来的这些包了。
更改主题
其实本来spacemacs默认的主题给我的印象还不错,直到我打开了一个haskell文件… 所以更换一个更顺眼的主题就是下一个折腾的目标了。毕竟现在还不会手写emacs lisp来搞一些黑科技,所以姑且就先求助于themes-megapack
吧。
这个包好想自带了,所以只需要在~/.spacemacs
里面的dotspacemacs-configuration-layers
中添加themes-megapack
就好了。里面大概有86种主题(虽然好看的没几种),可以在theme gallery预览。个人还是比较偏好sanityinc-tomorrow-night
啦,monokai
在这里支持的着色似乎有些少?
可以使用SPC T h
来选择主题,但需要注意的是这不是永久变更。如果更改每次启动时加载的主题的话,需要把~/.spacemacs
里面的dotspacemacs-themes
的第一项改成选好的主题名字。
2016.02.01 update
添加自动补全
话说默认竟然是没有自动补全的还是有点不爽,虽然什么都自己动手来大概就是开源社区的哲学吧(。打开基础的补全功能需要auto-complete
这个插件,在.spacemacs
里取消注释就行了。之后需要为auto-complete
提供一个后端,这里用company-ghc
。安装什么的都和上面一样,配置里要显示指明一下:
1 | (defun haskell/init-company-ghc () |
这样就能实现函数的补全了。标准库什么的完全没问题!不过目前来看还有两个缺点,一个是启动时速度有些慢,另一个比较烦的是没法补全模块名称。这个哪天再折腾一下吧。
haskell-mode的一些完善工作
首先,装一些不错的包
1 | cabal install hasktags structured-haskell-mode stylish-haskell present |
给haskell-mode添加一些key-bindings
1 | ;; (defun haskell/init-haskell-mode () |
然后可能就是折腾一下ghc-mod和学习一下它们复杂的快捷键了orz。
2016.02.02 update
啊啊果然之前是ghc-mod没有配置好。每次都在这里po配置实在太麻烦了,于是把配置放在了github上(https://github.com/SuperHex/spacemacs-haskell-config)。
之后就专心维护这份配置文件了!之后可能会研究一下传说中逆天的org mode,希望能解救我于堆积如山的bookmark之中吧(。今天好水啊(。