最近自己搞配置然后不小心删除了${HOME},结果自己没有经常git pull的习惯,以前的努力可以说是 全部木大 全没了。就试了下doom emacs, 结果现在已经完全不想恢复以前的配置了,我能想到的作者都想到了。就是我不太会用evil mode, 但是又不想完全不用,因为感觉其实还蛮简洁的,只是有很多地方和我以前使用的原生emacs冲突,而且在仅仅是想要浏览代码的时候感觉hjkl还蛮方便的,现在设置的方法是
(add-hook 'read-only-mode-hook 'evil-mode)
但是打开就关不掉了,我是编程菜鸟,还在学习lisp中,有什么方法可以实现只在read only 的时候启用evil呢?
应该使用evil-local-mode。只在某个buffer打开evil
已经解决了,本来是用了
这个方法,但是后面发现容易造成有的buffer是readonly但是不是evil mode,有的buffer是evilmode不是readonly,感觉很不爽 遂上网找到全局的readonly,找到了这个
但是他的方案是把原来的单个buffer的readonly换成全局的readonly切换,没有办法保存每个buffer的readonly状态,不是我最想要的结果。
遂换了个思路,不求针对每个buffer,针对全局的切换readonly状态和evil状态。
如下:
(global-set-key (kbd "C-x C-q")
(lambda ()
(interactive)
(cond
((eq buffer-read-only nil)
(setq is-global-readonly t)
(global-auto-readonly)
(evil-mode 1)
)
(t
(setq is-global-readonly nil)
(global-auto-readonly)
(evil-mode 0)))))
这段代码要结合我上面给出的那个链接里面的代码,我稍后改一下那里面的一些东西再把完整配置发上来,那里面有我不太习惯的配置。
算了,突然感觉这样也挺好的,只要把几个多余的函数去掉就可以了。稍后再研究一下autoload的用法,完善一下我的配置。
加了个功能,当进入insert state的时候换回默认键位而且取消readonly
;;; ~/.doom.d/evil/private-evil-settings.el -*- lexical-binding: t; -*-
(add-load-path! "../misc")
(require 'global-readonly-mode)
(global-readonly-toggle)
;; Only enable evil mode when buffer read-only!
;;;###autoload
(global-set-key
(kbd "C-x C-q")
(lambda ()
"Troggle evil && readonly ON/OFF together."
(interactive)
(cond
((eq buffer-read-only nil)
(setq is-global-readonly t)
(read-only-mode)
(evil-mode 1)) ;; If set hook, some tmp buffer is read-only.
(t
(setq is-global-readonly nil)
(read-only-mode 0)
(evil-mode 0)))))
(add-hook 'evil-insert-state-entry-hook
(lambda ()
"Changes keybindings and quit readonly-mode."
(setq is-global-readonly nil) ;; Just a signal
(read-only-mode 0)
(evil-mode 0))
)
(provide 'private-evil-settings)