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 未开启时抛出错误。

🔎

延伸解读

Evil 模式与跳转列表的关系

Evil 模式的跳转列表仅记录带有 :jump t 标志的动作,这意味着普通函数调用不会被视为跳转。这一特性可能导致用户在使用 flymake 时无法顺利返回编辑位置,因此理解这一机制对于有效使用编辑器至关重要。

自定义跳转动作的实用性

通过使用 evil-define-motion 自定义跳转动作,用户可以将 flymake 的错误跳转纳入 Evil 的跳转列表。这种方法不仅提高了编辑效率,还确保了在处理错误时能够快速返回到原始编辑位置,减少了工作中的中断。

错误处理的重要性

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

🏷️

标签

➡️

继续阅读