全部学习汇总: GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used.
我自己凑了一组emacs的配置使用了很长一段时间,很大程度上的功能在模仿spacemacs,但是我的配置更加轻量化,因此在使用的时候延迟感会少很多。因此,轻度的编码等工作用起来还算是顺手。由于之前用久了spacemacs,里面的很多组合键已经形成了肌肉记忆。因此,习惯了之后在按键冲突的时候会出现操作失误。Minibuffer之中,上下行的移动就是一个典型的例子。
在spacemacs中,minibuffer中光标的上下行移动可以使用C-j 、C-k或者C-p、 C-n,这两个都可以。由于一直用evil,vim的模式,4个导航键感觉更加习惯。因此,在使用spacemacs的时候,我大部分的操作都是用C-j、 C-k的按键操作。这样,当我换成我自己的配置之后就会出现异常。而正确的方式则是使用C-p、C-n,这个在大多数的emacs配置中都是奏效的。但是,既然emacs的可定制化这么高,我还是尝试做一次定制。
我先从网络上找现成的配置,抄了几个都没有效果。接下来,尝试找李杀的教程。找到了这个链接: Emacs: Change Minibuffer Keybinding (xahlee.info)
这里的这种定义方式我做了参考,不仅仅是直接定义一组快捷键,也尝试了先定义为nil之后再处理。
因为,C-j在emacs默认的配置中有其用途:minibuffer-complete-and-exit
因此,在调用这组组合键的时候基本上就是minibuffer直接退出。
进一步,我又找到了这部分信息:Minibuffer Maps (GNU Emacs Manual)
阅读了一下,不明其意,但是感觉似乎与这个有一定关系。然而不幸运的是几个都尝试了一下,全都没有成功。后来看了下C-n的组合键绑定:
算是后知后觉,现在使用了ivy之后这个minibuffer已经被ivy-minibuffer取代掉了。于是,增加如下配置:
(define-key ivy-minibuffer-map (kbd "C-j") 'ivy-next-line)
(define-key ivy-minibuffer-map (kbd "C-k") 'ivy-previous-line)
之后测试,已经有了期待中的效果了。