Ну, это своего рода хакерское решение, но, похоже, оно работает. Я не совсем уверен, как вы хотите отобразить это, поэтому я сопоставил его с <leader>i
в моем примере. Не стесняйтесь изменить это на что угодно.
function! Icap()
augroup icap
au InsertLeave * exec "normal! \<C-o>gUlgi\<esc>:augroup icap | au! | augroup END\<cr>"
au InsertEnter * exec "normal! m`"
augroup END
endfunction
nnoremap <leader>i :call Icap()<cr>i
Это определяет функцию "Icap" (сокращение от "вставить заглавные буквы"), которая устанавливает две автокоманды. Первая автокоманда, это прямо перед входом в режим вставки:
- Vim добавляет текущее местоположение курсора в список переходов.
Затем после вызова foo и сразу после выхода из режима вставки произойдет следующее:
Vim типа <C-o>gUl
. Это позволит перейти к вашему предыдущему местоположению в списке переходов и преобразовать символ под курсором в верхний регистр. После этого vim набирает gi<esc>
. Это хакерский способ вернуть курсор на прежнее место. Теоретически, <C-i>
должен работать, но когда я тестировал его, я столкнулся со странными проблемами.
Vim удаляет все автокоманды, принадлежащие этой функции. Это сделано для того, чтобы в будущем при изменении режима вставки не происходили странные изменения, которые вам не нужны.
Вы также можете сделать сопоставление следующим образом:
nnoremap <leader>i :call Icap()<cr>
который затем позволит вам использовать другие команды для входа в режим вставки (c
, a
, I
, o
, s
и т. д.) и по-прежнему получать побочные эффекты капитализации