Eu criei uma função que visualmente seleciona a correspondência através da combinação de teclas viW
no modo normal.
Por favor, fique à vontade para apontar os casos que eu perdi. Também há provavelmente outro espaço para melhorias, já que eu não sei muito sobre o vimscript.
"visually select current programming WORD
function! SelectSensibleWORD()
"go to beginning of block
normal! ?^\|[[:space:]({[]
let l:char = matchstr(getline('.'), '\%' . col('.') . 'c.')
if -1 != match(l:char, '[[:space:]({\[]')
normal! l
endif
"enter visual mode
normal! v
"find brackets or end of the WORD
normal! /$\|[[:space:]({[\]})]
while 1
let l:char = matchstr(getline('.'), '\%' . col('.') . 'c.')
if -1 != match(l:char, '[({[]')
"keep brackets balanced
normal! %
else
"don't select more than necessary
normal! h
return
endif
normal! n
endwhile
endfunction
nnoremap viW :call SelectSensibleWORD()<CR>
Outros comandos podem ser criados com base nisso:
nmap ciW viWc
nmap diW viWd
nmap yiW mwviWy'w
Pitty, vimscript não é suportado pelo marcador de sintaxe.