Почему нажатие escape go возвращает один символ? - PullRequest
3 голосов
/ 16 апреля 2020

В vim мне всегда было любопытно, почему нажатие клавиши es c заставляет курсор вернуться на go назад на один символ (обычно). Например, если я набрал:

This is |

Если курсор равен |, то после того, как я закончу печатать и нажму es c, строка будет выглядеть так:

This is|

И для повторного ввода с того места, где я остановился, мне нужно будет нажать a вместо i. Почему это ожидаемое поведение в vim?

1 Ответ

2 голосов
/ 16 апреля 2020

Я нашел следующий ответ в этом вопросе на Unix & Linux стеке обмена:

В режиме вставки курсор находится между символами или перед первый или после последнего символа. В обычном режиме курсор находится над символом (для этой цели новые строки не являются символами). Это несколько необычно: большинство редакторов всегда помещают курсор между символами, и большинство команд действуют на символ после (строго говоря, при ) курсора. Возможно, это отчасти связано с тем, что до графического интерфейса текстовые терминалы всегда показывали курсор на символе (подчеркивание или блок, возможно, мигание). Эта абстракция не работает в режиме вставки, потому что для этого требуется еще одна позиция (сообщения против ограждений).

Переключение между режимами должно, так сказать, перемещать курсор на полсимвола. Команда i перемещается влево, чтобы поместить курсор перед символом, над которым он был закончен. Команда a перемещается вправо. Выход из режима вставки (нажатием Es c) перемещает курсор влево, если это возможно (если он находится в начале строки, вместо этого он перемещается вправо).

Я полагаю, Es c поведение имеет смысл. Часто вы печатаете в конце строки, и там Es c можно только go слева. Таким образом, общее поведение является наиболее распространенным поведением.

Думайте о символе под курсором как о последнем интересном символе, а о команде вставки как a. Вы можете повторить a Es c, не перемещая курсор, за исключением того, что вы столкнетесь на одну позицию вправо, если начнете с начала непустой строки.

Кредиты первоначальному автору.

Если вы хотите отредактировать это поведение, вы можете последовать совету @ib. в этот ответ :

Хотя я не рекомендовал бы изменять механику курсора по умолчанию, один из способов достижения рассматриваемого поведения - использовать следующее отображение режима вставки.

: inoremap `^

Здесь клавиша Es c перегружена в режиме вставки, чтобы дополнительно запустить команду `^, которая перемещает курсор в положение, в котором она находилась был последний раз, когда режим вставки был оставлен. Поскольку в этом отображении он выполняется сразу после выхода из режима вставки с Es c, курсор остается на один символ вправо по сравнению с его положением с поведением по умолчанию.

В отличие от некоторых другие обходные пути, этот не требует компиляции Vim с функцией +ex_extra.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...