Открытие новой линии в режиме зла
Рассмотрим следующий фрагмент кода:
(goto-char (point-max))
(insert "\n")
В обычном состоянии злого режима goto-char визуально перемещает курсор в конец строки, но он указывает перед последним символом, а не после. Хотя приведенный выше пример работает просто отлично - он работает так, как будто курсор указывает на последний символ, поэтому последний символ не переносится на следующую строку, что является правильным поведением. Интересно, как зло определяет, что его нужно вставить после последнего символа, а не до.
Причина, по которой я спрашиваю об этом, состоит в том, что я пытаюсь понять, почему нажатие клавиши enter в режиме haskell repl в обычном состоянии в режиме evil устанавливает последний символ текущей строки на следующей строке. Это выглядит как (insert "\n")
вызывается в обратном вызове, и зло не знает, что ему нужно поддерживать совместимость.
1 ответ
Не совсем понятно, в чем вопрос, но я предполагаю, что вы хотите избежать перемещения последнего символа на следующую строку после нажатия Enter.
Чтобы имитировать поведение Vim, курсор перемещается назад на точку после выхода из состояния вставки. Как побочный продукт, (insert "\n")
в конце строки происходит непосредственно перед символом, на котором сидит курсор, что ставит его перед новой строкой.
Чтобы отключить эту функцию совместимости, выполните (setq evil-move-cursor-back nil)
(или использовать setq-local
если вы хотите отключить только в REPL), и вы не должны ставить последний символ на следующей строке.