1 votes

Meilleur comportement du clic de la souris avec l'édition virtuelle de gVim

J'aime utiliser la fonction virtualedit=all de Vim, mais j'aime aussi pouvoir cliquer après la fin d'une ligne et voir le curseur aller directement à la fin de la ligne (au lieu d'aller à la position exacte où j'ai cliqué). Existe-t-il un plugin ou quelque chose qui puisse rendre plus intelligent le positionnement du curseur de Vim après un clic de souris ? Idéalement, je voudrais qu'il fasse l'une des choses suivantes :

  • Ignorer la préférence virtualedit lors d'un clic de souris : Lors d'un clic de souris, si le clic a lieu après le dernier caractère de la ligne, Vim positionne le curseur à la fin de la ligne, que virtualedit soit activé ou non.
  • Comportement du clic de la souris en fonction du mode : En mode normal, un clic de souris après la fin de ligne fait sauter le curseur sur le dernier caractère ; en mode insertion, le curseur est positionné sous la souris.
  • Comportement de style MS-Word (préférable) : Le curseur saute à la fin de la ligne lors d'un simple clic, ou à la position virtuelle lors d'un double-clic.

Je sais que je pourrais simplement passer de virtualedit-all à virtualedit-block, mais je préfère virtualedit=all pour tout sauf le comportement du clic de souris. (En fait, j'aime même pouvoir positionner le curseur au milieu d'un caractère de tabulation à l'aide d'un clic de souris, donc c'est vraiment juste le comportement de cliquer après le dernier caractère d'une ligne).

P.S. S'il vous plaît, pas de commentaires ou de réponses suggérant que j'apprenne simplement à ne pas utiliser la souris. L'utilisation de la souris est l'une des raisons pour lesquelles je suis passé de Vim à gVim, parce que franchement, c'est parfois extrêmement pratique, même si votre principale méthode de déplacement dans un fichier n'est que le clavier.

EDIT : Ajout d'une idée dépendant du mode.

1voto

Ben Points 2199

Les clics de souris sont mappables comme les pressions de touches dans Vim. Vous pouvez donc remapper un clic de souris pour définir virtualedit comme vous le souhaitez, puis faire le clic de souris, puis le remettre.

Le mode insertion est plus compliqué que ce que je veux essayer pour le moment, mais le mode normal est facile. Quelque chose comme cela devrait fonctionner, bien qu'il serait encore mieux de sauvegarder et de restaurer virtualedit plutôt que de le définir explicitement :

nnoremap <silent> <LeftMouse> :set virtualedit=<CR><LeftMouse>:set virtualedit=all<CR>

Il est également possible de remapper un double-clic de manière similaire, en utilisant la fonction <2-LeftMouse> 代わりに <LeftMouse> . Quelques expériences ont montré que ce n'était peut-être pas nécessaire. Mais comme le double-clic vous met par défaut en mode de sélection visuelle, vous pourriez vouloir un mappage du type :

nnoremap <silent> <2-LeftMouse> <LeftMouse>

Mais je n'ai pas réussi à le faire fonctionner. Je n'ai pas réussi à faire en sorte qu'il ne reste pas en mode visuel, même avec ce mappage et plusieurs autres similaires.


EDIT (par OP ; je veux poster ma solution "finale" ici pour que les autres puissent la voir, mais je ne veux pas poster une réponse séparée, puisque cette réponse est vraiment celle dont j'avais besoin) :

Voici ce que j'ai fini par mettre dans mon .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> 

J'aimerais combiner ces deux fonctions en une seule appelée NonVirtualClick ou quelque chose qui permettrait de sauvegarder l'ancien paramètre de virtualedit, de faire le clic, puis de restaurer le paramètre, mais <LeftMouse> n'est pas une commande, elle ne fonctionne donc pas à l'intérieur d'une fonction. (Des conseils sur la façon de contourner ce problème seraient les bienvenus...)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X