Dans vim, je me trouve souvent en train de supprimer (ou de copier) de gros blocs de texte. On peut compter les lignes de texte et dire (par exemple) 50dd
supprimer 50 lignes.
Mais comment supprimer ce gros bloc de texte sans savoir combien de lignes supprimer?
Je ne suis pas Vim Guru, mais ce que j'utilise dans cette situation, c'est le "mode visuel". En mode commande, tapez V
(majuscule). Puis déplacez vers le haut/bas pour mettre en évidence le bloc que vous voulez supprimer (toutes les commandes de mouvement habituelles fonctionnent). Puis supprimez-le avec x
ou d
.
Allez à la ligne de départ et tapez ma (marquez "a"). Ensuite, allez à la dernière ligne et entrez d'a (supprimer pour marquer "a").
Cela supprimera toutes les lignes du courant au marqué (inclus). Il est également compatible avec vi
ainsi que vim
, sauf que votre environnement n'est pas doté de ce dernier.
Vous pouvez également utiliser le mode visuel (certaines commandes sont utilisables avec l'option de suppression également) vipvap sélectionner le paragraphe, v2ap sélectionner deux paragraphes dap travaux, d2ap aussi. Vous pouvez supprimer des blocs de [
]
comme da[
Pour référence: les types d'objets. De la documentation 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
Il existe de nombreuses meilleures réponses ici, mais pour être complet, je mentionnerai la méthode que j’utilisais avant de lire certaines des bonnes réponses mentionnées ci-dessus.
Supposons que vous souhaitiez supprimer des lignes 24 à 39. Vous pouvez utiliser la commande ex
:24,39d
Vous pouvez également tirer des lignes en utilisant
:24,39y
Et trouvez et remplacez juste les lignes 24 à 39 en utilisant
:24,39s/find/replace/g
Si vous activez les numéros de ligne via set number
, vous pouvez simplement dNNG
, ce qui supprimera la ligne NN de la position actuelle. Ainsi, vous pouvez naviguer jusqu'au début de la ligne que vous souhaitez supprimer et simplement d50G
en supposant qu'il s'agit de la dernière ligne que vous souhaitez supprimer.
Cela dépend en quelque sorte de ce que gros bloc. Vous voulez peut-être simplement supprimer un paragraphe, auquel cas un dip ferait.
Il y a plusieurs possibilités, le mieux dépend du texte sur lequel vous travaillez.
Deux possibilités me viennent à l’esprit:
V
, S-V
, ...), sélectionnez le texte avec le curseur de la souris et appuyez sur d
dap
Si le bloc entier est visible à l'écran, vous pouvez utiliser le paramètre relative numumber. Voir: help relative numumber. Disponible en 7.3
A côté des autres motions déjà mentionnées ici, il y a aussi le mouvement /{pattern}<CR>
, donc si vous savez que vous voulez supprimer la ligne contenant foo, vous pouvez faire dV/foo<CR>
. V
est ici pour forcer le mouvement ligne par ligne car par défaut /
est caractère par caractère.
Compter les lignes est trop fastidieux pour moi, mais compter les "paragraphes" n'est pas si mal. '{' et '}' déplacent le curseur sur la première ligne vide avant et après le curseur, respectivement. Les opérations de déplacement de curseur peuvent être combinées avec la suppression, et plusieurs autres réponses ont utilisé une approche similaire (dd pour une ligne, dG pour la fin du document, etc.)
Par exemple:
/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */
Lorem *ipsum(void) {
return dolor(sit, amet);
}
Si votre curseur commence au-dessus du bloc de commentaires, 'd}' supprime le bloc de commentaires et 'd2}' supprime le bloc de commentaires et le bloc de code. Si votre curseur commence en dessous du bloc de code, 'd {' supprime le code et 'd2 {' les supprime. Bien sûr, vous pouvez sauter un bloc en déplaçant d'abord le curseur: '{d {' ou '} d}'.
Si vous êtes cohérent avec vos espaces, ou si vous pouvez compter les paragraphes en un coup d'œil, cela devrait fonctionner. Le fichier d'aide de Vim a plus d'astuces de curseur si cela vous intéresse.
Vous pouvez placer votre curseur au début ou à la fin du bloc et passer en mode visuel (shift-v). Ensuite, déplacez-vous simplement vers le haut ou le bas jusqu'à ce que le bloc souhaité soit mis en surbrillance. Enfin, copiez le texte en appuyant sur y ou coupez-le en appuyant sur d.
Vous pouvez également entrer un très grand nombre, puis appuyer sur dd
si vous souhaitez supprimer toutes les lignes situées sous le curseur.
En supposant que votre curseur se trouve au début du bloc:
_V/^$<CR>d (where <CR> is the enter/return key)
_
V
/^$<CR>
d
Une solution plus robuste:
_:set nowrapscan
:nnoremap D V/^\s*$\\|\%$<CR>d
_
:set nowrapscan
D
(sur les commandes suivantes): :nnoremap D
V
/^\s*$\\|\%$<CR>
d