3

Я делаю повторяющуюся задачу, для которой я определил макрос в одной из F-клавиш, но мне все еще нужно удерживать нажатой клавишу «Shift», чтобы вводить первую букву каждый раз, когда я выполняю этот макрос. Я задавался вопросом, может ли это быть включено в макрос, но мой поиск способов сделать это был бесполезным.

Существует много способов входа в режим вставки, связанных с положением курсора в тексте. Но можно ли определить макрос, в котором первая буква, которую я пишу после входа в режим вставки, будет заглавной, и только это?

1 ответ1

4

Ну, это своего рода хакерское решение, но, похоже, оно работает. Я не совсем уверен, как вы хотите отобразить это, поэтому я сопоставил его с <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 и т. д.) и по-прежнему получать побочные эффекты капитализации

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .