В vim, когда я нажимаю, ESC
чтобы вернуться в командный режим, курсор перемещается на один символ влево. Это не то, на что я надеюсь, иногда я сразу же нажимаю, l
чтобы вернуться к этому месту, возможно, чтобы удалить персонажа.
Есть ли причина для такого поведения? Это удобно для шаблона использования, который я пропускаю?
Ответы:
В режиме вставки курсор находится между символами или перед первым или после последнего символа. В обычном режиме курсор находится над символом (для этой цели новые строки не являются символами). Это несколько необычно: большинство редакторов всегда помещают курсор между символами, и большинство команд воздействуют на символ после (не строго говоря, под ) курсора. Возможно, это отчасти связано с тем, что до графического интерфейса текстовые терминалы всегда отображали курсор на символе (подчеркивание или блок, возможно, мигание). Эта абстракция терпит неудачу в режиме вставки, потому что для этого требуется еще одна позиция (сообщения против заборов).
Переключение между режимами должно, так сказать, перемещать курсор на полсимвола. Команда
i
перемещается влево, чтобы поместить курсор перед символом, над которым он был закончен. Командаa
движется вправо. Выход из режима вставки (нажатием Esc) перемещает курсор влево, если это возможно (если он находится в начале строки, вместо этого он перемещается вправо).Я полагаю, что Escповедение имеет смысл. Часто вы печатаете в конце строки, и там Escможно идти только влево. Таким образом, общее поведение является наиболее распространенным поведением.
Думайте о символе под курсором как о последнем интересном символе, а о команде вставки -
a
. Вы можете повторить, a Escне перемещая курсор, за исключением того, что вы будете ударены на одну позицию вправо, если вы начнете с начала непустой строки.источник
Визуально это имеет больше смысла в gvim:
При редактировании курсор находится между символами:
В обычном режиме он находится над последним символом:
Так что это на самом деле не вернуться характер, только от того , между
r
и ,s
чтобы быть наr
источник
m
должен оставаться выделенным после возвращения в нормальный режим ...Это поведение является редактируемым, как здесь ответили , но остановитесь и подумайте о том, что происходит на секунду. Когда вы находитесь в режиме вставки, вы на самом деле находитесь не над символом, а между ними. Когда вы вставляете что-то, курсор переходит к концу того, что вы вставили, так что следующая вставленная вещь будет после этого. Теперь подумайте, если вы только что набрали письмо, то хотите что-то с ним сделать. Нажатие Escбудет помещать курсор выбора непосредственно над последним вставленным символом. Если бы он этого не делал, это было бы довольно неловко.
Ситуация, о которой вы, вероятно, думаете, это когда вы в режиме вставки перемещаетесь, как если бы вы были в нормальном режиме, а затем переключаетесь. В этом случае кажется, что курсор возвращается на один символ назад, но если вы так думаете, он показывает, что вы были в режиме вставки, и последнее, что вы сделали, - НЕ вставили. Может быть, вам следует проводить больше времени в обычном режиме?
источник
i
иESC
нажатий клавиш?i
сопровождаемое последующим,ESC
является функциейi
и полностью не зависит отESC
; в частности, когда вы нажимаете,i
вы просите vim вставить символ, что по определению означает «вставить символ перед тем, на котором я нахожусь», а неa
«добавить символ после этого».Введите Alt+, Lчтобы вернуться в командный режим.
Не требует переназначения или изменения конфигурации vim. Это работает, потому что на большинстве терминальных эмуляторов Alt+ KEYотправляет Escсопровождаемое KEY(на xterm вам может понадобиться добавить
Xterm*metaSendsEscape: true
строку в ваш файл ~ / .Xdefaults). Такое поведение позволяет вам даже «создавать» другие комбинации режимов вставки, которые работают прямо из коробки - как Alt+ Sto Backspace.Кстати, курсор на вершине только что написанного символа может быть очень неудобным. Например, Escdwне удалит слово после текста, который вы только что вставили.
источник
Esc d e
слово перед ним. Я вернулся к поведению по умолчанию, потому что почувствовал, что оно изменило поведение, уже закодированное в моей голове.Вот мое решение.
Это более краткая версия решения, предложенного на странице вики об этом .
источник