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>
以前のコードをvimrcに入れれば、望みどおりの動作をするはずです。
これを使用するには、を押して;P{motion}
、PadMacro()
関数がとでカバーされる文字を囲む必要{motion}
が\Pad{
あり}
ます。
使用例:
;Pl
カーソルの下のキャラクターを囲むため(l
カーソルの下のキャラクターを覆う動きのため)
;Piw
カーソルの下の単語を囲むには(iw
カーソルの下の単語内のすべての文字をカバーするテキストオブジェクトであるため)
;Pis
カーソルが置かれている文を囲む(is
文内のすべての文字をカバーするテキストオブジェクトであるため)
;P$
カーソルと行末の間の文字を囲む
;P
視覚的に選択された文字を囲む
PadMacro()
関数によって実行されるすべては単一の版と見なされます。つまり、ドットの繰り返しが可能です。
言い換えると、囲むテキストの類似した部分が複数ある場合\Pad{}
、毎回マッピングをヒットする必要はなく、初回のみです(その後、ヒット.
して最後の版を繰り返すことができます)。
エンクロージャーを適用できるテキストオブジェクトの完全なリストについては、を参照してください
:help text-objects
。