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 标志的动作,例如跳转到指定行或文件开头的动作。

➡️

继续阅读