Как я могу получить отменить поведение в Зле, подобное Vim's?

17

Поведение отмены по умолчанию в Evil слишком грубо, потому что оно рассматривает все, что происходит между переходом в режим вставки и оставлением его как одной операции редактирования. Когда вы вводите целый абзац текста во время одной вставки и затем выполняете отмену, весь абзац удаляется. В отличие от этого, Vim запускает новый блок отмены всякий раз, когда вы перемещаете курсор в режиме вставки другими способами, чем ввод текста.

Зло имеет переменную настройки, которую можно использовать для получения более детальной истории отмен:

(setq evil-want-fine-undo t)

С этой настройкой Evil запускает новый блок отмены, когда курсор перемещается в режиме вставки, как это делает Vim. Однако этот параметр также не соответствует тому, как обрабатывается операция замены: если вы заменяете слово с помощью cw, вам придется дважды отменить восстановление исходного слова: один раз для удаления нового слова и один раз для повторной вставки исходного слова. Это несовместимо с Vim и не имеет особого смысла, потому что замена должна быть атомарной.

Вопрос: Как я могу настроить Зло и дерево отмены, чтобы получить поведение отмены Вима?

tmalsburg
источник
Сообщите о проблеме здесь: bitbucket.org/lyro/evil/issues?status=new&status=open (Зло обычно считает отклонения от vim ошибками).
Шости
@shosti, вы правы, но наличие переменной настройки говорит о том, что они решили сделать исключение из этого правила в данном случае. Я все равно сообщу об ошибке. Давай посмотрим что происходит.
tmalsburg
Я думаю, что переменная настройки на самом деле предназначена для того, чтобы получить более похожее на Emacs поведение отмены (Emacs не выполняет атомарные операции так же, как vim).
Шости
Вот новый выпуск: bitbucket.org/lyro/evil/issue/444/…
tmalsburg

Ответы:

10

Поскольку @shosti указал, что Evil рассматривает отклонение от поведения Vim как ошибки, я подал ошибку, и один из авторов Evil добавил новое возможное значение для evil-want-fine-undo:

(setq evil-want-fine-undo 'fine)

С этим параметром вы получаете новые единицы отмены при перемещении курсора в режиме вставки, но операции замены отменяются за один шаг. Насколько я могу судить, это согласуется с Vim. Смотрите здесь для деталей.

tmalsburg
источник
2
Это решение больше не рекомендуется, поскольку 'fineнастройка устарела.
tmalsburg
1

Согласно описанию переменной (см. C-h v evil-want-fine-undo), Значение fineбольше не поддерживается из-за противоречивого поведения.

Поскольку я использую отмену, чтобы отменить опечатки, или упомянутая установка помогла моему выделению.

(setq evil-want-fine-undo t) 

У меня была проблема ошибки раскручивать в орг-таблицы редактирования формулы, так как вы не должны выйти из режима вставки , если вы хотите , чтобы изменить *Edit Forumlas*с C-'.

Йорн Реймердес
источник
Спасибо за обновление. Я попросил, чтобы проблема с Bitbucket была вновь открыта.
tmalsburg