デフォルトのsurround.vimでは、囲み文字で囲まれた文字を削除する場合は、「di'」、「di"」の様に囲み文字を指定する必要がある。
di"
"Hello World"
→ ""
di'
'Hello World'
→ ''
自動的に囲み文字を判別してくれて、削除してくれたら便利だな、と思ったので、スクリプトを書いてみた
nnoremap ci :call <SID>ExSurround("ci")<CR>
nnoremap di :call <SID>ExSurround("di")<CR>
function! s:ExSurround(cmd)
let pattern = "'\"{[("
let front = strpart(getline("."), 0, col("."))
let max = -1
for pat in split(pattern, '.\zs')
let pos = strridx(front, pat)
if pos > max
let max = pos
endif
endfor
if max >= 0
let sorround = strpart(front, max, 1)
call feedkeys(a:cmd . sorround, 'n')
endif
endfunction
di
"Hello World"
→ ""
'Hello World'
→ ''
対応している文字は'、"、{、[、(
※もっと良い書き方があったら押して下さいー。