Déplacer après la fin du mot ou Supprimer après le curseur

8

Quelle est la séquence la plus rapide à supprimer jusqu'à la fin de la ligne après la position du curseur?

Exemple:

Je veux supprimer cette ligne plus rapidement

Séquence: 5eDsupprimera le dernier caractère du motline

Je veux supprimer ce lin

Se déplacer avec vim m'a souvent mis sur le premier ou le dernier caractère d'un mot, m'obligeant à bouger d'une touche de plus chaque fois que je veux supprimer jusqu'à la fin de la ligne (dans l'exemple ci-dessus, en ajoutant un mouvement à droite: 5elD). Existe-t-il un moyen plus efficace (en se déplaçant après la fin du mot ou en supprimant après le curseur)?

Pierre-Jean
la source
1
6wDlaisse un espace après le dernier mot, mais au moins le texte visible est comme vous le souhaitez. 6wDxtermine le travail, mais vous êtes à nouveau à quatre touches.
Peter Lewerin
Merci Peter pour l'alternative, mais en effet, cette solution me laisse une autre frappe pour terminer le travail. Comme ce scénario est assez courant, ce serait formidable de faire ce travail en une seule action. Cependant, votre solution est meilleure que celle de mon exemple, dans la plupart des scénarios.
Pierre-Jean
Si vous le faites comme Peter le suggère et que vous vous retrouvez avec un espace de fin, il existe des plugins comme DeleteTrailingWhitespace qui peuvent les éliminer automatiquement.
Philipp Moers

Réponses:

4

Dest une commande inclusive qui fonctionne sur un mouvement qui inclut le curseur à une extrémité et le dernier caractère imprimable sur la ligne à l'autre extrémité. Il n'y a pas AFAIK de manière intégrée pour transformer une commande inclusive en une commande exclusive et vice versa.

La solution la plus lourde serait de définir vos propres opérateurs et mouvements / objets texte.

Une solution un peu plus légère serait de définir des mappages pour ces boîtiers d'angle.

Une solution encore plus légère - mais ennuyeuse - serait de passer quelques touches de plus en mode visuel.

Ou, vous pouvez simplement vous déplacer d'une manière légèrement plus "agile":

5f D
romainl
la source
1
Eh bien, je suis un peu triste, il n'y a pas de moyen plus simple, mais vous avez répondu à ma question. Je vous remercie!
Pierre-Jean
1

Il existe plusieurs façons de réaliser ce que vous voulez:

5elD
6f D
6wDx
6whD
# ... probably others too

Tout cela ne vous coûte que +1 touche.

Si la suppression à partir de la position actuelle +1 était possible, il serait judicieux de demander également la suppression de la position actuelle -1. Cela soulèverait également la question des autres commandes, par exemple la suppression jusqu'à la fin du fichier de la ligne actuelle +1, -1, etc.

Comment cela peut-il fonctionner? Je ne vois que deux façons possibles:

  1. Passez un paramètre aux commandes existantes pour modifier leur comportement avec la nuance souhaitée. Cela vous coûtera inévitablement +1 touche, donc vous ne serez pas mieux que ce qui existe déjà
  2. Ayez une nouvelle frappe pour ce comportement. La plupart des touches du clavier ont déjà quelque chose de plus important et de plus puissant à faire, ce serait un choix très difficile d'attribuer l'une des touches inutilisées pour une si petite fonctionnalité

Donc, je ne vois pas de moyen d'avoir quelque chose de mieux que les fonctionnalités actuelles :-)

Je suis d'accord que c'est un peu malheureux qu'il n'y ait pas de commande "atomique" à supprimer du caractère suivant. Je vois l'utilité pratique de ce que vous demandez: lorsque vous raccourcissez un texte, je veux souvent supprimer à partir d'un caractère espace, parce que je ne veux pas laisser d'espace blanc à la fin des lignes (Git s'en plaint, par exemple). Et les commandes de saut de mot wet ene conviennent pas très bien à cela, comme les wsauts vers les premières lettres et les edernières lettres, et il n'y a pas de raccourci pour sauter dans l'espace après un mot, à l'exception des recherches explicites comme f. Je comprends donc et partage même votre besoin. Je ne vois tout simplement pas où cela peut être coincé dans la fonctionnalité existante.

La meilleure alternative à laquelle je peux penser est d'enregistrer l'action dans une macro, disons d. À la fin d'un mot (sur la dernière lettre), enregistrez comme ceci:

qdlDq

Ensuite, vous pouvez refaire cette action à la fin d'un autre mot avec @d. Pour le faire à plusieurs reprises, vous pouvez le faire @@. Lorsque vous le répétez, c'est plus rapide à taper que lD, mais cela peut dépendre de votre goût. Si vous ne le faites pas à plusieurs reprises, la macro n'aide pas vraiment, car c'est le même nombre de touches de toute façon (+ la création de la macro).

janos
la source
"Comme toutes les touches du clavier ont déjà quelque chose de plus important et de plus puissant à faire, cette option semble tout simplement impossible". Pas vrai; il y a plusieurs clés inutilisées, et certaines qui sont sans doute moins puissantes / importantes qui pourraient être remappées pour nécessiter la clé leader, les libérant pour quelque chose de vraiment important.
Eh bien, la clé que j'utilise pour tester un mappage est la clé de retour arrière, et ce n'est pas un mauvais choix pour une opération qui effectue une suppression (actuellement, je l'ai configurée pour effectuer une suppression de ligne sans modifier les registres habituellement utilisés par une telle action, je peux donc copier / couper du texte, supprimer des lignes en utilisant le retour arrière, puis coller le texte d'origine).