设置特定buffer的evil state

如何将messages-buffer-mode对应的evil state设置成默认为 emacs state,每次进message buffe 要退出都得C-z切换成emacs state,感觉很不方便,能否设置成默认就是emacs state 我自己试了(add-hook 'messages-buffer-mode-hook 'evil-emacs-state) 和(evil-set-initial-state 'messages-buffer-mode 'emacs)都没有效果

1 个赞

你还有一个可以试:

      (add-to-list 'evil-emacs-state-modes .....)

试了,还是不行,加入后在evil-emacs-state-modes中能看到有messages-buffer-mode
但是切换到messages buffer下还是normal state

(add-hook 'messages-buffer-mode-hook #'(lambda ()
                                        (evil-emacs-state)))

这个应该是可以。我试了一下。启动后切换到Message还是normal。但是手动kill掉它,再重新生成就是emacs-state了。

可能是启动的时候生成的那个Message buffer时,这个设置函数还没有添加到这个hook中。所以可以在启动的时候去手动设置一把。所以总的来说,把下面这段加入到启动脚本中应该就可以啦:

(with-current-buffer "*Messages*"
  (evil-emacs-state))

(add-hook 'messages-buffer-mode-hook #'(lambda ()
                                         (evil-emacs-state)))

PS:不知道怎么回事,代码里的*号不见了。需要自行添加一下。

1 个赞
(with-current-buffer "*Messages*"
  (evil-emacs-state))
(add-hook 'messages-buffer-mode-hook #'(lambda ()
                                         (evil-emacs-state)))

You know why? You didn’t use code block to format you text!

Markdown(wikipedia)

(with-current-buffer "*Messages*"
  (evil-emacs-state))
只需要这段代码就起作用了

下面这段代码没有起作用
(add-hook 'messages-buffer-mode-hook #'(lambda ()
                                     (evil-emacs-state)))

谢谢各位大大的解答
(add-hook 'messages-buffer-mode-hook #'(lambda ()
                                     (evil-emacs-state)))

这段加上,是假设你开启了emacs后把 *Messages* buffer删了,然后emacs重新生成后该buffer还是emacs-state。

嗯,试过了,确实是这样。谢谢您的耐心解答