93 votes

Vim: supprimez les 2 premiers espaces pour plusieurs lignes

Quel est le moyen le plus simple de supprimer les 2 premiers espaces de chaque ligne en utilisant VIM? Fondamentalement, il s'agit de répéter "2x" pour chaque ligne.

Clarification : ici, l'hypothèse est que les 2 premiers caractères sont des espaces. Donc, la question concerne l'indentation de plusieurs lignes ensemble.

0 votes

Est-ce spécifiquement l'espace blanc, ou les deux premiers caractères peu importe ce qu'ils sont?

0 votes

C'est les deux premiers caractères. En supposant que les deux premiers caractères sont des espaces.

0 votes

J'ai montré une façon de le faire via la recherche et le remplacement en mode éditeur ex. Une méthode garantit qu'elle ne le fera que pour les lignes commençant par deux espaces (et ne supprime que deux espaces). L'autre supprime simplement les deux premiers caractères, peu importe ce qu'ils sont.

138voto

Tom Kerr Points 5716
  1. Entrez en mode de bloc visuel avec Ctrl-V (ou Ctrl-Q si vous utilisez Ctrl-V pour coller);
  2. Sélectionnez la zone à supprimer avec les flèches;
  3. Appuyez ensuite sur d pour supprimer la zone sélectionnée.
  4. Appuyez sur Esc

7 votes

Veuillez utiliser ctrl-v pour sélectionner les caractères à supprimer, puis appuyez sur d pour les couper.

2 votes

Meilleure réponse en vedette! :-)

0 votes

Cela ne fonctionne pas dans tous les vim que j'utilise, mais pour ceux où cela fonctionne, c'est très pratique et c'est agréable de pouvoir visualiser la zone que vous êtes sur le point de supprimer avant de le faire réellement.

104voto

bhinesley Points 834

Quelques options supplémentaires. Vous pouvez décider quelle est la "manière la plus simple".

Supprimer les 2 premiers caractères de chaque ligne :

:%normal 2x

Supprimer les 2 premiers caractères de chaque ligne, seulement s'ils sont des espaces :

:%s/^  /

Remarquez que le dernier slash est optionnel, il n'est présent que pour que vous puissiez voir les deux espaces. Sans le slash, cela ne fait que 7 caractères, incluant le signe :.

Déplacer l'indentation vers la gauche pour chaque ligne :

:%normal <<

15voto

Jason Down Points 13690

Vous pouvez également utiliser une recherche et un remplacement (dans l'éditeur ex, accessible via le caractère :) :

Supprimez les deux premiers caractères peu importe ce qu'ils sont :

%s/^.\{2}//

Supprimez les deux premiers caractères d'espace blanc (doivent être au début et tous deux doivent être des espaces... toute ligne ne correspondant pas à ce critère sera ignorée) :

%s/^\s\{2}//

2 votes

Le /g à la fin est superflu. Vous ne faites qu'une correspondance par ligne.

0 votes

Imo c'est une excellente solution

7voto

Peter Rincker Points 14594

En supposant un shiftwidth=2, alors en utilisant le décalage avec une plage de %

:%<

4voto

Keith Thompson Points 85120

Deux espaces, ou deux caractères? (2x fait le dernier.)

:[plage]s/^  //

supprime deux blancs au début de chaque ligne; utilisez % (équivalent à 1,$) comme [plage] pour le faire pour tout le fichier.

:[plage]s/^..//

supprime les deux premiers caractères de chaque ligne, quel qu'ils soient. (Notez qu'il supprime deux caractères, pas nécessairement deux colonnes; un caractère de tabulation compte comme un caractère).

Si ce que vous faites vraiment est de changer l'indentation, vous pouvez utiliser la commande < pour la diminuer, ou la commande > pour l'augmenter. Définissez shiftwidth pour contrôler de combien il se décale, par exemple

:set shiftwidth=2

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