Подтвердить что ты не робот

Позиционирование курсора при входе в режим вставки

Когда я переключаюсь в режим команд в Vim, курсор, кажется, перемещает один символ назад, когда он находится в конце или на слове, и когда я иду в конец строки с $, он не перейдите к фактическому концу строки, но один символ до конца последнего слова, а l ( "el" ) не перемещает его вперед, и я должен использовать клавишу со стрелкой, чтобы попасть туда.

Я не смог найти документацию по этому поведению, но мне это кажется странным. Каковы причины этого (для моего собственного любопытства) и как я могу обойти его (или справиться с ним)?

4b9b3361

Ответ 1

немного более понятно, если вы используете gvim, где изменяется курсор.

Режим вставки в gvim имеет курсор в качестве I-луча, так как следующая введенная вами буква будет вставлена ​​после |. нормальный режим имеет курсор блока, потому что следующее, что вы набираете, может просто повлиять на выделенную в настоящее время букву (например, если вы используете x, s и т.д.). Таким образом, режим вставки на самом деле добавляет текст, но обычный режим каким-то образом изменяет текст.

Таким образом, в нормальном режиме прыжок в конец строки на самом деле означает только последний символ, поскольку это последнее, что можно изменить. в режиме вставки курсор проходит последний символ, так как после этого можно добавлять вещи.

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


Скажем, у вас t [h] есть текст

([] означает, что курсор блока находится над тем, что h)



Скажем, у вас есть t | его текст

если вы нажмете я в этот момент, курсор будет выглядеть так (в gvim) (| являющийся курсором вставки)



Скажем, у вас есть текст |

если вы нажали вместо i, это будет выглядеть так



Еще одна вещь, о которой нужно помнить (как упоминалось в pavanlimo), из обычного режима вы можете перейти в режим вставки с помощью курсора непосредственно перед первым символом строки или сразу после последнего символа с shift-I или shift- а.

Ответ 2

Я не совсем уверен в рассуждениях позади этого, но вы можете обойти его, нажав:

Shift + a

Ответ 3

Вам может быть интересна опция virtualedit и следующее значение:

set virtualedit=onemore

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

Это решает проблему таким образом, но лично я считаю это поведение немного странным. Только в нескольких случаях вы сталкиваетесь с проблемой, поэтому стоит игнорировать ее; -)

Ответ 4

Это потому, что все используемые вами команды влияют на букву, над которой курсор завершен. Если бы не было смысла нажимать x (удалить 1 букву) за фактическую букву.

На самом деле нет необходимости перемещать курсор в командном режиме за последней буквой, если вы хотите, например, добавьте вы можете нажать a, который помещает курсор за букву в режиме ввода.

Ответ 5

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

Ответ 6

Я предлагаю

:set virtualedit=onemore
:inoremap <Esc> <Esc>`^