... как Вы сделали бы это?
задача для дополнительного кредита: выясните способ вынудить энергию сразу обновить позицию курсора после выхода из режима вставки
Хотя я бы не рекомендовал изменять стандартную механику курсора, один из способов достижения рассматриваемого поведения является использование следующего режима вставки отображение.
:inoremap <silent> <Esc> <Esc>`^
Здесь клавиша Esc перегружена в режиме вставки, чтобы дополнительно запустить команду ``^`, которая перемещает курсор в позицию, где он находился в последний раз. когда режим Insert был остановлен. Поскольку в данном отображении она выполняется сразу после выхода из режима вставки с помощью Esc, курсор остается на один символ вправо по сравнению с его положением при поведении по умолчанию.
В отличие от некоторых других обходных путей, этот не требует, чтобы Vim был скомпилирован
с функцией +ex_extra
.
Хотя существуют приемы, позволяющие решить эту проблему (например, сопоставления ESC, упомянутые в двух предыдущих сообщениях), последовательного способа сделать это не существует. Причина в том, что нет способа определить метод, который был использован для входа в режим вставки. В частности, для строки abcDefg
с курсором на D
:
Если вы нажмете i, местоположение режима вставки будет между c
и D
. Обычное ESC установит курсор на c
;
(или метод обратного клика) установит курсор на D
.
Если нажать a, то местоположение режима вставки будет между D
и e
. Обычный ESC установит курсор на D
;
установит курсор на e
.
Если вы действительно хотите сделать это, вы можете сделать что-то вроде этого:
let insert_command = "inoremap <ESC> <C-O>:stopinsert<CR>"
let append_command = "iunmap <ESC>"
nnoremap i :exe insert_command<CR>i
nnoremap a :exe append_command<CR>a
НО: помните, что это будет работать только с i
и a
в качестве методов ввода: если вы используете режим визуального блока, I
, или A
или что-то еще, вам придется придумать новые команды для этого (а их очень много). Поэтому я бы настоятельно рекомендовал вам не делать этого.
Лично я бы рекомендовал привыкнуть к поведению по умолчанию. Вы можете легко сделать его логическим для i
OR логическим для a
. Если вы измените значение по умолчанию на логическое для i
за счет логического для a
, вы просто запутаетесь при использовании стандартной установки vi/vim.
inoremap <silent> <Esc> <C-O>:stopinsert<CR>
в вашем .vimrc