spacemacs默认使用smartparens来自动补全后半个括号,但是smartparens和yasnippet有兼容问题,从这里链接里可以看到,现在是退出yas的时候重新启用sp,所谓退出,是C-g
或者跑到这段snippet外面时触发。
仍然存在的问题是:1.上面这个退出事件并不永远可靠,如果在一个snippet退出之前在它里面expand另一个snippet,那sp就关掉了永远回不来了(要手动启用) 2.跑到snippet的最后一个空格时,实际上yas的任务已经完成了,但是不会退出,仍然要靠上一段中所说的办法退出。
想象这样一个场景:我expand了一个function的snippet,然后填好了函数名、参数,跑到了body里面,开开心心要写一大段代码了,此时yas没有退出,我写括号时不会自动补全,更糟的是,我在这个body里要用一个snippet的话,一用就导致上一段的问题1,sp回不来了。解决这个问题也很简单,每次到了snippet里最后一个空格,C-g
一下退出yas就好了,但是每次都要多按一下,很糟心。
昨天我看山人第20期视频时候发现smartparens是在emacs自带的electric-pair基础上完成的,于是我尝试关掉sp,打开electric-pair-mode,上面的问题通通没有了,没退出yas之前,我也可以获得括号的自动补全。(相应代价是失去sp的高级功能,如在括号间跳转、barf/slurp修改lisp代码结构等,但是我只要自动补全括号就好了,所以这个办法很好用。)