TIL: flymake 错误跳转加入 Evil 跳转列表
💡
原文中文,约1000字,阅读约需3分钟。
📝
内容提要
本文讨论了如何在使用 flymake 时解决跳转错误位置的问题。由于 Evil 模式不将普通函数调用视为跳转,作者提供了一种技巧,通过定义新的跳转动作来解决此问题。使用 `evil-define-motion` 包装 `flymake-goto-next-error` 和 `flymake-goto-prev-error`,并将其绑定到快捷键 C-j 和 C-k,使用户能够顺利跳转到错误并返回编辑位置。
🎯
关键要点
- 使用 flymake 跳转到下一个错误时,Evil 模式不将普通函数调用视为跳转,导致无法返回编辑位置。
- Evil 的跳转列表只记录带 :jump t 标志的动作,因此需要使用 evil-define-motion 包装 flymake-goto-next-error 和 flymake-goto-prev-error。
- 通过定义新的跳转动作并绑定到快捷键 C-j 和 C-k,用户可以顺利跳转到错误并返回编辑位置。
- 在包装的动作中,使用 :jump t 标志确保当前位置被记录到跳转列表中,并在 flymake 未开启时抛出错误。
❓
延伸问答
如何在使用 flymake 时解决跳转错误位置的问题?
可以通过使用 evil-define-motion 包装 flymake-goto-next-error 和 flymake-goto-prev-error,并将其绑定到快捷键 C-j 和 C-k 来解决跳转错误位置的问题。
Evil 模式为什么不将普通函数调用视为跳转?
因为 Evil 模式的跳转列表只记录带 :jump t 标志的动作,普通函数调用不符合这个条件。
如何确保 flymake 未开启时调用会报错?
在包装的动作中使用 (unless (bound-and-true-p flymake-mode) (signal 'search-failed nil)) 来确保在 flymake 未开启时调用会报错。
如何将新的跳转动作绑定到快捷键?
可以使用 Evil 内置的 evil-define-key 将新的跳转动作绑定到快捷键,例如将 mes/evil-goto-next-error 绑定到 C-j,mes/evil-goto-prev-error 绑定到 C-k。
使用 flymake 跳转到错误后如何返回编辑位置?
可以通过按 C-o 来返回编辑位置,前提是使用了包装的跳转动作。
Evil 的跳转列表记录哪些动作?
Evil 的跳转列表只记录带 :jump t 标志的动作,例如跳转到指定行或文件开头的动作。
➡️