Os cliques do mouse são mapeáveis como os pressionamentos de tecla no Vim. Assim, você pode remapear um clique do mouse para definir o virtualedit como desejar, em seguida, fazer o clique do mouse e, em seguida, defini-lo de volta.
O modo de inserção é mais complicado do que eu gostaria de tentar no momento, mas o modo normal é fácil. Algo como isso deve funcionar, embora seja ainda melhor salvar e restaurar o virtualedit em vez de defini-lo explicitamente:
nnoremap <silent> <LeftMouse> :set virtualedit=<CR><LeftMouse>:set virtualedit=all<CR>
Também é possível remapear um clique duplo de maneira semelhante, usando <2-LeftMouse>
em vez de <LeftMouse>
. Alguma experimentação mostrou que pode não ser necessário. Mas, como o clique duplo por padrão coloca você no modo de seleção visual, talvez você queira um mapeamento como:
nnoremap <silent> <2-LeftMouse> <LeftMouse>
Eu não consegui fazer isso funcionar, no entanto. Eu não consegui descobrir como fazê-lo ficar fora do modo visual, mesmo com esse mapeamento e várias aplicações similares.
EDIT (por OP; quero postar minha solução "final" aqui para que os outros possam ver, mas não quero postar uma resposta separada, já que essa resposta é realmente a que eu precisava):
Veja o que acabei colocando no meu .vimrc
:
function! TempNonVirtual()
let g:oldvirtualedit=&virtualedit
set virtualedit=
endfunction
function! RestoreVirtual()
let &virtualedit=g:oldvirtualedit
endfunction
set virtualedit=all
nnoremap <silent> <LeftMouse> :call TempNonVirtual()<CR><LeftMouse>:call RestoreVirtual()<CR>
Gostaria de combinar essas duas funções em uma única função chamada NonVirtualClick
ou algo que salvaria a configuração antiga do virtualedit, faça o clique e depois restaure a configuração, mas <LeftMouse>
não é um comando não funciona dentro de uma função. (Sugestões sobre como contornar isso seria bem vindo ...)