Положение курсора при входе в режим вставки - PullRequest
33 голосов
/ 09 сентября 2010

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

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

Ответы [ 6 ]

56 голосов
/ 09 сентября 2010

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

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

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

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



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

Допустим, у вас есть t [h] текст





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

Допустим, у вас есть его текст





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

Допустим, у вас есть текст





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

18 голосов
/ 09 сентября 2010

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

Shift + a
10 голосов
/ 12 сентября 2010

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

set virtualedit=onemore

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

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

9 голосов
/ 09 сентября 2010

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

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

5 голосов
/ 09 сентября 2010

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

1 голос
/ 17 июня 2014

Я предлагаю

:set virtualedit=onemore
:inoremap <Esc> <Esc>`^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...