以下片段可以在vim wiki 上找到:
function! TwiddleCase(str)
if a:str ==# toupper(a:str)
let result = tolower(a:str)
elseif a:str ==# tolower(a:str)
let result = substitute(a:str,'\(\<\w\+\>\)', '\u\1', 'g')
else
let result = toupper(a:str)
endif
return result
endfunction
vnoremap ~ ygv"=TwiddleCase(@")<CR>Pgv
但是,这在视觉块模式下会失败。给定以下输入:
foo alpha
bar beta
将光标定位在f
of 上foo
并按下
ctrl-v je~会产生以下结果。
Foo
Bar alpha
beta
而不是预期的
Foo alpha
Bar beta
如何改进此功能以在视觉块模式下正常工作?