Добавляем в .vimrc:
function! s:ToggleQuote()
let q = searchpos("'", 'n', line('.'))
let qb = searchpos("'", 'bn', line('.'))
let dq = searchpos('"', 'n', line('.'))
let dqb = searchpos('"', 'bn', line('.'))
if q[0] > 0 && qb[0] > 0 && (dq[0] == 0 || dq[0] > q[0])
execute "normal mzcs'"`z"
elseif dq[0] > 0 && dqb[0] > 0
execute "normal mzcs"'`z"
endif
endfunction
nnoremap <silent>' :<C-U>call <SID>ToggleQuote()<CR>
Если курсор переместить внутрь кавычек и нажать ', то кавычки поменяются на двойные/одинарные.
ps. скрипт использует vim-surround.
Автор: uzver