Позиционирование курсора при входе в режим вставки
Когда я переключаюсь в режим команд в Vim, курсор, кажется, перемещает один символ назад, когда он находится в конце или на слове, и когда я иду в конец строки с $
, он не перейдите к фактическому концу строки, но один символ до конца последнего слова, а l
( "el" ) не перемещает его вперед, и я должен использовать клавишу со стрелкой, чтобы попасть туда.
Я не смог найти документацию по этому поведению, но мне это кажется странным. Каковы причины этого (для моего собственного любопытства) и как я могу обойти его (или справиться с ним)?
Ответы
Ответ 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>`^