Puis-je faire vim changer son comportement de curseur?

11

J'utilise vim depuis quelques années en tant qu'éditeur secondaire mais pour diverses raisons, je me retrouve à l'utiliser de plus en plus même lorsque mon éditeur principal est disponible. Un problème qui m'a toujours dérangé vimet qui m'empêche de l'utiliser davantage est la façon dont il gère le placement du curseur. Le curseur ne peut se trouver que sur un caractère, plutôt qu'entre les caractères, comme ce serait le cas avec tout éditeur créé depuis 1984.

Pour juste un exemple de pourquoi c'est un problème, si je veux supprimer le dernier mot sur une ligne, je frappe $pour aller à la fin de la ligne, puis dbpour supprimer vers l'arrière. Cela laisse un caractère à supprimer, car il $n'est pas vraiment allé à la fin de la ligne, il est allé au dernier caractère de la ligne et dbn'a supprimé que ce qui était avant le caractère actuel. Le problème n'est pas que je doive taper un caractère supplémentaire, c'est la pensée supplémentaire impliquée dans ce qui devrait être simple, qui détourne mon attention de ce que j'essaie d'accomplir.

Il me semble que le placement du curseur d'idée plus moderne est à tous égards supérieur, et je voudrais passer vimà utiliser cette approche. Je suis sûr que certains vimfans inconditionnels seront en désaccord avec mon point de vue à ce sujet, mais comme l'un des arguments standard pour vimla supériorité de est sa configuration infinie:

  • peut-il livrer dans ce cas?
  • Peut- vimon faire pour placer le curseur entre les caractères?
iconoclaste
la source
2
On dirait que vous recherchez le Insertmode ou manquez le point de normalmode. Je ferais $dawou $bdwpour supprimer le dernier mot d'une ligne en mode normal. En Insertmode je ferais A<Ctrl-w>.
jw013
3
Pour mémoire, en tant que personne effrayée par l'idée même d'un monde inférieur "entre les personnages", la séquence de touches correcte pour supprimer le dernier mot de la ligne actuelle est$bD
Alan Curry
1
L'utilisation d'une souris n'est pas idéale, mais les inefficacités importantes surviennent lorsque vous devez vous arrêter et réfléchir à la façon de faire ce que vous voulez faire. La vraie chose qui est précieuse n'est pas une seconde ici et là, mais la concentration . Lorsque vous perdez votre concentration, vous perdez bien plus que quelques secondes.
iconoclaste du
2
D'après les commentaires jusqu'à présent, il semble que la réponse à la question soit "Non, ce modèle de mouvement du curseur est irrévocablement intégré dans la conception de vim et ne peut pas être modifié." Est-ce exact?
iconoclaste du
2
@iconoclast C'est aussi ma conclusion. Pour autant que je sache, il est impossible dans vi ou vim de traiter tous les caractères d'une ligne de manière uniforme, il y a toujours une exception pour le premier ou le dernier caractère.
Gilles 'SO- arrête d'être méchant'

Réponses:

5

Vous pouvez :set virtualedit+=onemore, ce qui vous permet de dépasser le dernier caractère. Malheureusement pour vous, $va toujours au dernier personnage; vous devez passer le curseur pour le dépasser. D'un autre côté, vous pouvez utiliser g$, qui va normalement au dernier caractère de la ligne d' écran sur une ligne qui se termine; en onemoremode, il passe également juste après le dernier caractère d'une ligne non encapsulée (ou la dernière ligne d'écran d'une ligne encapsulée).

:h 'virtualedit' dit que cette option peut perturber les scripts, mais je ne sais pas quel est le risque réel.

echristopherson
la source