Supprimer un espace pour un ensemble de lignes dans l'éditeur Vim


12

J'ai du texte comme celui-ci dans un fichier:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

J'ai besoin de supprimer l'espace vide avant chacune des lignes. Pour une ligne ce que je fais est 0dw

Je peux répéter la même commande en utilisant. mais en naviguant manuellement vers les lignes suivantes.

Mais existe-t-il un moyen d'appliquer «0dw» à ce bloc de lignes?

Je suppose qu'il existe un moyen d'utiliser des macros, mais je ne les ai jamais utilisées auparavant. Mais je suis disposé à les apprendre s'il n'y a pas d'autre choix.


+1 belle question, je finis par faire la même chose. Et bienvenue sur le site.
Sardathrion - contre les abus SE

Réponses:


10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

En savoir plus ici sur http://vim.wikia.com/wiki/Remove_unwanted_spaces

Si vous souhaitez le faire pour une gamme particulière de lignes:

:19,25s/^\s\+//

BTW, la meilleure façon de commencer à apprendre vim est d'exécuter la vimtutorcommande, il vous apprendra à utiliser Vim dans l'éditeur Vim.


1
: le était génial et merci beaucoup pour les alternatives et le lien :)
saiy2k

3
+1 pour la mention vimtutor ainsi qu'une bonne réponse.
Sardathrion - contre les abus SE

1
Sélectionnez les lignes pertinentes en utilisant Vet en déplaçant le curseur pour développer la sélection de lignes. Appuyez ensuite sur :pour entrer automatiquement '<,'>, et à partir de là, vous pouvez utiliser l'expression rationnelle de Nikhil.
UncleZeiv

1
une autre façon de faire une gamme de lignes (puisque j'oublie toujours les numéros de ligne) est de marquer les 2 lignes et d'opérer sur les marques. Par exemple, allez à la ligne 19 et appuyez sur «ma», allez à la ligne 25 et appuyez sur «mb», puis faites :'a,'bs/^\s\+//.
Patrick

7

Une autre façon de procéder consiste à utiliser les outils d'indentation de VIM (généralement liés à </ >). Vous devez d'abord trouver un moyen d'indiquer quelles lignes seront affectées. Vous pouvez utiliser le mode de sélection visuelle ou tout autre moyen pour spécifier une plage de lignes à affecter, puis utiliser un nombre arbitrairement élevé ou des niveaux d'indentation pour les supprimer. 9<fait généralement très bien l'astuce pour supprimer au moins 9 niveaux d'indentation possibles (tabulations / espaces) de la ou des lignes actuelles.


3

J'ai l'approche pour le faire dans les étapes suivantes simples:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

Explication de la troisième étape:

0 navigue jusqu'au début de la ligne.

dw supprime le mot (espaces vides).

normalapplique la commande 0dw.

'<,'> répète la normale pour toutes les lignes sélectionnées en mode visuel.


1

ctrl+vvous permet de faire quelque chose de similaire à ce que vous voulez mais pas exactement. Vous pouvez sélectionner un bloc visuel et appliquer une commande au lot.


2
j'ai sélectionné ces lignes en mode bloc et cette commande a fonctionné: '<,'> normal 0dw
saiy2k

1
@ saiy2k :normalest la chose importante ici, et je pense que c'est la meilleure réponse ici. Pourriez-vous l'afficher comme réponse?
Gilles 'SO- arrête d'être méchant'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.