1

考虑以下代码:

(goto-char (point-max))
(insert "\n")

在邪恶模式的正常状态下,goto-char 视觉上将光标移动到行尾,但它指向最后一个符号之前,而不是之后。虽然上面的例子工作得很好——它就像光标指向最后一个符号之后一样,所以最后一个符号不会被带到下一行,这是正确的行为。我想知道邪恶是如何确定它需要在最后一个符号之后插入的,而不是之前。

我问这个问题的原因是因为我试图理解为什么在邪恶模式的正常状态下按进入haskell-mode repl 会将当前行的最后一个符号放在下一行。看起来像是(insert "\n")在回调中调用,而 evil 不知道它需要保持兼容性。

4

1 回答 1

1

目前尚不完全清楚问题是什么,但我认为您希望避免在按 Enter 时将最后一个字符移动到下一行。

为了模仿 Vim 的行为,光标在退出插入状态后向后移动一个点。作为一个副产品,(insert "\n")行尾出现在光标所在的字符之前,这将它放在换行符之前。

要禁用此兼容性功能,请执行(setq evil-move-cursor-back nil)(或setq-local仅在 REPL 中禁用时使用),您应该能够避免将最后一个符号放在下一行。

于 2014-06-06T19:01:27.593 回答