58 votes

Pourquoi la commande point (.) est si utile dans VIM ?

J'utilise VIM assez régulièrement maintenant mais je n'utilise jamais la commande point (.) pour répéter l'action précédente. Je continue à lire que c'est génial, mais je ne vois jamais d'exemples concrets qui aient un sens pour moi et pour la façon dont je code dans VIM. Quels sont les exemples concrets qui montrent à quel point la commande point (.) est géniale ?

47voto

Benoit Points 35553

Voici quelques actions que je fais avec la commande point :

  • Plus simple que :%s/\<word\>/replacement/gc est * sur le mot, puis cereplacement<esc> et ensuite répéter n. . C'est une bonne solution si vous avez deux ou trois occurrences de votre mot. Si vous avez plusieurs mots que vous voulez remplacer, passez au mot suivant, appuyez sur * et encore n.
  • Lorsque je veux aligner certains blocs à gauche : <Ctrl-V>jjj<..... ou insérer des espaces à l'avant : <ctrl-v>jjjI<space><esc>....
  • après dd o dw la commande "point" permet d'effacer une autre ligne/mot.

Une chose magique qui se produit avec la commande dot est que si elle répète une commande qui a utilisé un registre numéroté, elle utilisera le registre numéroté suivant (cf. :help redo-register ).

Explication : Si vous avez dd sur 9 lignes et que vous voulez les restaurer dans l'ordre dans lequel vous les avez supprimées, alors faites : "1P........ . Notez que les registres 1 à 9 constituent l'anneau de suppression de Vim. "1P insérera avant le curseur le dernier texte supprimé, "2P insère alors l'avant-dernier texte supprimé, et ainsi de suite.

16voto

Mark Wilkins Points 29291

J'utilise dw.... assez souvent pour supprimer une série de mots sans avoir besoin de les compter mentalement au préalable. Dans cet exemple, 5dw comporte moins de caractères, mais je pense que je suis plus rapide d'environ 3 ms en utilisant la commande dot pour répéter simplement la commande delete word sur le fait de les compter.

Modifier J'étais en train de faire un peu d'édition et j'ai réalisé qu'il y a une autre situation où j'utilise la commande point assez souvent. J'imagine qu'il existe un moyen beaucoup plus simple de gérer ce type de situation dans Vim, mais la commande dot m'aide dans les cas suivants et d'autres situations similaires. Ce qui suit est un exemple de " J'ai fait quelque chose une fois, maintenant je veux le répéter plusieurs fois. " J'écrivais un nouveau test (en C) et j'avais besoin d'y intégrer une constante de type chaîne de caractères représentant un script SQL que j'ai copié d'un autre endroit. Le script multiligne original (7 lignes) n'était pas entouré de guillemets doubles, alors j'ai fait ceci :

  • Collez le script directement dans le code (7 nouvelles lignes dans le fichier).
  • Positionnez le curseur sur la première nouvelle ligne.
  • Ispacespacespacespace"esc pour insérer des espaces et un guillemet ouvrant sur la ligne courante.
  • j. six fois pour ajouter une citation d'ouverture pour chaque ligne supplémentaire.
  • Repositionnement sur la première ligne du texte collé.
  • A\n"esc pour mettre un caractère de saut de ligne et un guillemet fermant sur la ligne courante.
  • j. six fois encore pour mettre le guillemet fermant sur les lignes restantes.

10voto

sidyll Points 20176
do_something();
do_another();
third_option();

Maintenant, avec le curseur sur la première ligne : A<bs><cr>{<cr><cr>}<cr><esc> . Maintenant, frappez j.j. y

do_something()
{ 

}

do_another()
{ 

}

third_option()
{ 

}

5voto

Xavier T. Points 14049

Toutes les autres réponses fournissent de bons exemples, je veux juste ajouter que dot est génial car il s'agit en quelque sorte d'une macro automatique pour votre dernière combinaison de touches qui n'est qu'à une touche.

Bien que les macros soient excellentes, elles sont un peu encombrantes à utiliser, alors que la dot est toujours disponible, même si elle est moins puissante.

3voto

Al.G. Points 2817

Quand vous avez besoin de le convertir :

instance Movable Position where
    (x,y) --> Left  = (x-1,y)
    (x,y) --> Right = (x+1,y)
    (x,y) --> Up    = (x,y-1)
    (x,y) --> Down  = (x,y+1)

dans ceci :

instance Movable Position where
    Position(x,y) --> Left  = Position(x-1,y)
    Position(x,y) --> Right = Position(x+1,y)
    Position(x,y) --> Up    = Position(x,y-1)
    Position(x,y) --> Down  = Position(x,y+1)

vous utiliseriez une sélection de blocs visuels pour la "position" de gauche et un point pour celle de droite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X