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:
;Pl
colocar o caractere embaixo do cursor (porque l
é um movimento que cobre o caractere embaixo do cursor)
;Piw
colocar a palavra sob o cursor (porque iw
é um objeto de texto que cobre todos os caracteres dentro da palavra sob o cursor)
;Pis
colocar 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
.