Почему Vim позиционирует каретку одного символа с $(конец строки)?

Соблюдайте строку в экземпляре Vim:

Теперь я ударил $:

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

Кто-нибудь знает, почему Vim делает это? Кстати, 7.3. Спасибо за помощь.

Ответ 1

Нажатие $ в режиме командной строки приводит к тому, что курсор перемещается в конец строки, эффективно выделяя последний символ. Нажмите i, чтобы вставить перед последним символом, или a, чтобы добавить к этой строке. Это немного неоднозначно здесь, потому что вы используете символ канала как курсор, а не прямоугольный блок-курсор. Посмотрите на "help termcap-cursor-shape", если вы хотите изменить это.

Если цель заключается в добавлении к концу строки, A переместится в конец строки и войдет в режим вставки одним нажатием клавиши.

Ответ 2

Используйте a для добавления символа после текущего.

Или, чтобы перейти к концу строки и добавить в 1 шаг, используйте капитал a. То есть shift A.

Аналогично shift - I для вставки в начале строки без предварительного нажатия ^.

Ответ 3

Курсор не может находиться между двумя символами, он всегда находится на символе.

Если вы нажмете $, затем x, вы правильно удалите последний печатный символ текущей строки.

То, что вы наблюдаете, это тот факт, что с помощью i вы всегда вставляете текст перед выбранным символом. Если вы хотите вставить после выбранного символа, вы должны использовать a или лучше a, как уже упоминалось.

Другими словами:
i означает "вставить перед символом под курсором".
a означает "вставить после символа под курсором".

Мнемоника для a: a для "append".

Ответ 4

Курсор равен, расположенный полностью на конце после нажатия $. Он не может выходить за пределы последнего символа, поскольку он подразумевает добавление нового символа в строку.