次のようなことを試すことができます。ブロックごとに何かをヤンクし、カーソルを置いて<Leader>p
、リーダーキーが何であれ、を押します。
function! FancyPaste()
let paste = split(@", '\n')
let spaces = repeat(' ', col('.')-1)
call map(paste, 'spaces . v:val')
call append(line('.'), paste)
endfunction
nnoremap <Leader>p :call FancyPaste()<CR>
もちろん、マッピングを好きなように変更することができます。それは単なる提案です。
更新:これは引数を受け入れるバージョンです。これにより、たとえばシステムクリップボードから貼り付けることができます。また、virtcol()
代わりにを使用して、次col()
の使用の可能性を考慮します'virtualedit'
。
function! FancyPaste(reg)
let paste = split(getreg(a:reg), '\n')
let spaces = repeat(' ', virtcol('.')-1)
call map(paste, 'spaces . v:val')
call append(line('.'), paste)
endfunction
nnoremap <Leader>p :call FancyPaste('"')<CR>
nnoremap <Leader>cp :call FancyPaste('+')<CR>
タブではなく、スペースでのみインデントされることに注意してください。適切な数のタブ(および必要に応じてスペース)でインデントするには、追加のコード行が必要になりますが、かなり実行可能です。