function! s:PadMacro(type) abort
if a:type ==# 'char'
normal! `[v`]d
elseif a:type ==# 'line'
normal! '[V']d
elseif a:type ==# 'v'
normal! `<v`>d
else
return
endif
let string = '\Pad{' . @" . '}'
silent execute "normal! i\<c-r>=string\r"
endfunction
nnoremap <silent> ;P :set operatorfunc=<sid>PadMacro<cr>g@
vnoremap <silent> ;P :<c-u>call <sid>PadMacro(visualmode())<cr>
Se você colocar o código anterior no seu vimrc, ele deve fazer o que você deseja.
Para usá-lo, bateu ;P{motion}ea PadMacro()função deve incluir os caracteres cobertos por {motion}com \Pad{e }.
Exemplos de uso:
;Plcolocar o caractere embaixo do cursor (porque lé um movimento que cobre o caractere embaixo do cursor)
;Piwcolocar a palavra sob o cursor (porque iwé um objeto de texto que cobre todos os caracteres dentro da palavra sob o cursor)
;Piscolocar a frase na qual o cursor está (porque isé um objeto de texto que cobre todos os caracteres dentro de uma frase)
;P$ para colocar os caracteres entre o cursor e o final da linha
;P para incluir os caracteres visualmente selecionados
Tudo o que é feito pela PadMacro()função é considerado uma edição única, o que significa que é repetível em pontos.
Em outras palavras, se você tiver várias partes semelhantes de texto para anexar, \Pad{}não há necessidade de clicar no mapeamento todas as vezes, apenas na primeira vez (depois disso, você pode pressionar .para repetir sua última edição).
Para obter uma lista completa de texto-objetos sobre os quais você pode aplicar seu gabinete, consulte:
:help text-objects.