在邪恶模式中开辟一条新线

时间:2014-06-01 05:54:42

标签: emacs elisp evil-mode

考虑以下代码:

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

在邪恶模式的正常状态下,goto-char会将光标直观地移动到行尾,但它会在之前指向最后一个符号,而不是之后。虽然上面的示例工作得很好 - 它的工作方式就好像光标在最后一个符号后指向,因此最后一个符号不会被传送到下一行,这是正确的行为。我想知道它是如何确定它需要在最后一个符号之后插入,而不是之前。

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

1 个答案:

答案 0 :(得分:1)

问题是什么并不完全清楚,但我认为你想在进入后避免将最后一个字符移动到下一行。

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

要禁用此兼容性功能,请执行(setq evil-move-cursor-back nil)(如果您只想在REPL中禁用,请使用setq-local,并且应该能够避免将最后一个符号放在下一行。< / p>