191 votes

vim - Comment supprimer un gros bloc de texte sans compter les lignes ?

Dans vim, je me retrouve souvent à supprimer (ou copier) de gros blocs de texte. On peut compter les lignes de texte et dire (par exemple) 50dd pour supprimer 50 lignes.

Mais comment supprimer ce grand bloc de texte sans avoir à savoir combien de lignes il faut supprimer ?

290voto

paxdiablo Points 341644

Allez à la ligne de départ et tapez ma (marque "a"). Ensuite, allez à la dernière ligne et entrez d'a (supprimer pour marquer "a").

Cela supprimera toutes les lignes de la ligne actuelle à celle marquée (inclusivement). C'est également compatible avec vi ainsi que vim au cas où votre environnement n'en serait pas pourvu.

284voto

Mat Points 104488

Je ne suis pas un gourou de vim, mais ce que j'utilise dans cette circonstance est le "mode visuel". En mode commande, tapez V (capital). Ensuite, déplacez-vous vers le haut/bas pour mettre en évidence le bloc que vous voulez supprimer (toutes les commandes de déplacement habituelles fonctionnent). Ensuite, supprimez-le avec x ou d .

45voto

M'vy Points 3176

Vous pouvez également utiliser le mode visuel (certaines commandes sont également utilisables avec l'option de suppression). vip vap pour sélectionner le paragraphe, v2ap pour sélectionner deux paragraphes dap travaux, d2ap également. Vous pouvez supprimer des blocs de [ ] comme da[

Pour référence : les types d'objets. Extrait de la documentation de vim : section 4. http://vimdoc.sourceforge.net/htmldoc/visual.html

4. Operating on the Visual area             *visual-operators*

...    
The objects that can be used are:
aw  a word (with white space)           
iw  inner word                  
aW  a WORD (with white space)           
iW  inner WORD                  
as  a sentence (with white space)           
is  inner sentence                  
ap  a paragraph (with white space)          
ip  inner paragraph                 
ab  a () block (with parenthesis)           
ib  inner () block                  
aB  a {} block (with braces)            
iB  inner {} block                  
a<  a <> block (with <>)                
i<  inner <> block                  
a[  a [] block (with [])                
i[  inner [] block

38voto

daviewales Points 391

Il y a beaucoup de meilleures réponses ici, mais pour être complet, je vais mentionner la méthode que j'utilisais avant de lire certaines des grandes réponses mentionnées ci-dessus.

Supposons que vous vouliez supprimer les lignes 24 à 39. Vous pouvez utiliser la commande ex

:24,39d

Vous pouvez également tirer des lignes en utilisant

:24,39y

Et trouver et remplacer juste au-dessus des lignes 24-39 en utilisant

:24,39s/find/replace/g

11voto

jcm Points 4968

Si vous activez les numéros de ligne via set number vous pouvez simplement dNNG qui supprimera la ligne NN à partir de la position actuelle. Ainsi, vous pouvez vous rendre au début de la ligne que vous souhaitez supprimer et simplement d50G en supposant que c'est la dernière ligne que vous souhaitez supprimer.

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