Я нашел следующий ответ в этом вопросе на Unix & Linux стеке обмена:
В режиме вставки курсор находится между символами или перед первый или после последнего символа. В обычном режиме курсор находится над символом (для этой цели новые строки не являются символами). Это несколько необычно: большинство редакторов всегда помещают курсор между символами, и большинство команд действуют на символ после (строго говоря, при ) курсора. Возможно, это отчасти связано с тем, что до графического интерфейса текстовые терминалы всегда показывали курсор на символе (подчеркивание или блок, возможно, мигание). Эта абстракция не работает в режиме вставки, потому что для этого требуется еще одна позиция (сообщения против ограждений).
Переключение между режимами должно, так сказать, перемещать курсор на полсимвола. Команда i
перемещается влево, чтобы поместить курсор перед символом, над которым он был закончен. Команда a
перемещается вправо. Выход из режима вставки (нажатием Es c) перемещает курсор влево, если это возможно (если он находится в начале строки, вместо этого он перемещается вправо).
Я полагаю, Es c поведение имеет смысл. Часто вы печатаете в конце строки, и там Es c можно только go слева. Таким образом, общее поведение является наиболее распространенным поведением.
Думайте о символе под курсором как о последнем интересном символе, а о команде вставки как a
. Вы можете повторить a Es c, не перемещая курсор, за исключением того, что вы столкнетесь на одну позицию вправо, если начнете с начала непустой строки.
Кредиты первоначальному автору.
Если вы хотите отредактировать это поведение, вы можете последовать совету @ib. в этот ответ :
Хотя я не рекомендовал бы изменять механику курсора по умолчанию, один из способов достижения рассматриваемого поведения - использовать следующее отображение режима вставки.
: inoremap `^
Здесь клавиша Es c перегружена в режиме вставки, чтобы дополнительно запустить команду `^
, которая перемещает курсор в положение, в котором она находилась был последний раз, когда режим вставки был оставлен. Поскольку в этом отображении он выполняется сразу после выхода из режима вставки с Es c, курсор остается на один символ вправо по сравнению с его положением с поведением по умолчанию.
В отличие от некоторых другие обходные пути, этот не требует компиляции Vim с функцией +ex_extra
.