2009-09-21 7 views
3

Je dois changerComment faire correspondre une lettre décimale et vide dans vim?

1 A 
2 B 
3 C 
4 D 

à

A 
B 
C 
D 

qui signifie la lettre décimale au début de chaque ligne et la suivante ou plus doivent être supprimés en blanc. Je ne connais que Reqex en Perl, donc j'essaie d'utiliser:% s/^ \ d \ s + // pour résoudre mon problème, mais cela ne fonctionne pas. Est-ce que quelqu'un d'entre vous peut me dire comment faire le travail en utilisant vim?

merci.

Répondre

7

Vim a besoin d'une barre oblique pour +, alors essayez

:%s/^\d\s\+//

+0

Brian, espérons que vous ne me dérange pas, J'ai ajouté le ":%" pour m'assurer que c'est une commande ex et fonctionne sur toutes les lignes, pas seulement sur la ligne actuelle. – paxdiablo

+0

Pas du tout. Je pensais que l'OP savait cela, donc mon point était juste que Vim est drôle quand il s'agit de +, mais il est bon d'avoir la commande complète pour référence. Merci. –

2

Utilisez les éléments suivants

:%s/^[0-9] *// 
3

Une façon est d'utiliser la commande globale avec la commande de recherche et de remplacement:

:g/^[0-9] */s// 

Il recherche la séquence:

  • début de la ligne ^
  • un chiffre [0-9]
  • un espace <space>
  • zéro ou plusieurs espaces <space>*

puis substituts pour rien (s//). Bien que vous puissiez faire la même chose avec la commande search-and-replace seule, il est utile d'apprendre la commande globale puisque vous pouvez faire toutes sortes de choses merveilleuses avec les lignes sélectionnées (pas seulement chercher et remplacer)).

+0

+ 1, cette fonction de recherche globale est très intéressante, ": s" a fait tout ce dont j'avais besoin, donc je n'ai jamais regardé plus loin dans les fonctionnalités de recherche –

+0

@Fire Crow: Si j'utilisais une fonctionnalité globale, j'écrirais ':% g/^ \ d/norm^dW' –

+1

La commande: s est vraiment un raccourci: g avec une commande de substitution (et dans tout le fichier). Sa puissance réside dans le fait qu'il n'est pas limité à la substitution - vous pouvez l'utiliser pour exécuter n'importe quelle commande de deux points sur les lignes/modèles trouvés. – paxdiablo

0

Escape the signe plus:

:%s/^\d\s\+// 
1

Vous devez utiliser à la place

:%s/^\d\s\+// 

Être un texte éditeur, vim a tendance à traiter plus de caractères littéralement comme texte -Lorsque correspondant à une motif que perl. En mode par défaut, + correspond au littéral +.

Bien sûr, ceci est configurable. Essayez

:%s/\v^\d\s+// 

et de lire le fichier d'aide.

:help magic 
1

Vous pouvez également utiliser le mode bloc visuel (Ctrl + V), puis déplacer vers le bas et vers la droite pour mettre en évidence un bloc de caractères et utiliser « x » pour les enlever.Selon la disposition de la ligne, cela peut en effet être plus rapide (et plus facile à retenir).

1

Si vous voulez continuer à utiliser Perl pour cela, vous pouvez:

:%!perl -pe 's/^\d\s+//' 

Vim va écrire le fichier dans un fichier temporaire, exécutez le script Perl donné sur, et recharger le fichier dans le tampon d'édition .

0

Si elle est dans une colonne comme ça, vous pouvez aller dans le mode visuel de la colonne en appuyant sur:

esc ctrl+q 

alors vous pouvez mettre en évidence ce que vous voulez supprimer

Questions connexes