Dans vim, j'ai souvent besoin de supprimer ou de tirer / mettre de gros blocs de texte.
Je peux compter les lignes de texte et entrer quelque chose comme 50dd
supprimer 50 lignes.
Mais c'est un peu pénible. Comment puis-je supprimer ce gros bloc de texte sans avoir à connaître le nombre de lignes à supprimer au préalable?
move
jusqu'au bout. Supprimer ensuite jusqu’à la fin n’est pas différent du déplacement vers la fin.Réponses:
Allez à la ligne de départ de votre bloc et tapez ma(marque "a", bien que vous puissiez bien sûr utiliser différentes lettres, et même plusieurs lettres pour différentes marques à condition que vous puissiez garder dans votre tête ce que chaque lettre est une marque) .
Ensuite, allez à la dernière ligne et entrez d'a(effacer pour marquer "a") ou y'a(tirer pour marquer "a") (a) .
Cela supprimera / supprimera toutes les lignes du courant au marqué (inclus).
Ensuite, vous pouvez le coller ailleurs avec les commandes de collage normales, telles que pou P.
Il est également compatible avec
vi
etvim
, à tout hasard, que votre environnement n’est pas doté de ce dernier.(a) J'utilise aussi cela pour sauvegarder ma place dans le fichier si je dois aller chercher ailleurs quelque chose comme, par exemple, copier-coller la définition d'une fonction que je veux appeler.
Je marque simplement la ligne actuelle de la même manière ma, puis je m'éloigne pour trouver ce que vous cherchez.
Ensuite, une fois que je l’ai trouvée et copiée dans un registre, j’ai juste à entrer 'apour revenir en arrière pour marquer "a", la ligne que j’avais sauvegardée auparavant, où je pourrai ensuite la coller.
la source
v
touche, je me demande si j'en ai vraiment besoin ou s'il existe une meilleure méthode de déplacement.Dans Vim, utilisez le mode ligne visuelle :
Pour supprimer des blocs de texte volumineux, cela est préférable au mode visuel simple, car vous n'avez pas à vous soucier de la colonne à laquelle se trouve le curseur.
la source
}
pour sélectionner un paragraphe entier ou)
pour des phrases. Il y en a plus, vous pouvez lire à leur sujet dans:h object-motions
/something<CR>
est également une méthode très efficace pour atteindre la fin de votre bloc de sélectionj
, vous pouvez également saisir le numéro de la ligne, sans avoir à appuyer de façon répétée sur pour déplacer le curseur vers le bas (étape 3), puis surG
pour sélectionner cette ligne. Exemple:V150Gd
Vous pouvez
:set relativenumber
, alors vous n'avez pas à compter. ;)la source
:set number
, puis utilisez d35G pour supprimer jusqu’à la ligne 35.relativenumber
, mais c'est mieux :-)Vous pouvez facilement supprimer un gros bloc de texte en connaissant sa structure.
Si c'est un paragraphe, utilisez: d{(par exemple, vous pouvez préfixer avec le nombre de paragraphes)
S'il s'agit d'un bloc de code entre parenthèses, utilisez: d%
Si le texte apparaissant jusqu'à la fin du fichier, utilisez: dG
Si vous savez comment cela se termine, utilisez: d/et tapez le texte de fin suivi de Enter(vous pouvez également utiliser une expression régulière, les possibilités sont donc infinies).
Vous pouvez également utiliser le mode visuel ( V) et utiliser les touches de déplacement pour sélectionner rapidement le texte (par exemple, par {) et le supprimer ( d).
Ou, comme le suggère Lie Ryan, utilisez
d/search-string/e
pour supprimer le texte du curseur actuel à la chaîne recherchée.Voir:
:help d
et:help motion
pour plus d'informations.la source
d/search-string/e
de supprimer du curseur actuel jusqu'à la fin de la chaîne de recherche, y compris la chaîne de recherche elle-même, etc/search-query
d'entrer en mode insertion après la suppression. L'utilisation ded/
withset incsearch
est une combinaison intéressante, car elle vous permet de déterminer de manière interactive si vous utilisez la bonne plage de texte et vous aide à savoir quand arrêter de taper la requête de recherche pour éviter de saisir plus que nécessaire.d
aveca
(externe), oui
(interne) et un spécificateur d'objet très utile. Des objets tels quew
pour mot,p
pour le paragraphe,(
oub
pour(...)
,[
pour[...]
,{
ouB
pour{...}
etc documentation-opérateurs visuels .Vous pouvez utiliser des mouvements et / ou des objets texte. Par exemple, vous pouvez tout supprimer du curseur à la ligne vierge suivante avec
d}
. Si le curseur est à l'intérieur d'un paragraphe, celui-ci peut être supprimé avecdip
oudap
. Si le curseur est dans une balise HTML, vous pouvez le supprimer avecdit
oudat
.De bons mnémoniques pour ceux - ci sont " d elete i Nside" et " d élete un tour" (paragraphe / tag / parenthèses).
la source
Je fais habituellement
qui effacera chaque ligne entre les numéros de ligne de début et de fin fournis (y compris les lignes données).
Notez que les deux
start
etend
peuvent être des numéros de ligne absolus, des modèles ou des décalages d'une autre position.Voir aussi le commentaire de DoubleDown sur l' affichage de Vim gamme de documentation, il a quelques conseils utiles.
Exemple:
Disons que vous avez le fichier suivant:
Ensuite, en utilisant la commande
:2,3d
ou:/fox/,/over/d
ou:/quick/+1,/lazy/-1
ou:+1,+2d
si vous êtes sur la première ligne ou:-1,.d
si vous êtes sur la troisième ligne, vous obtenez:la source
:set ruler
, puis allez en haut et en bas du texte pour trouver les numéros de lignestart
et lesend
lignes, puis faites-le:<start>,<end>d
:+12,+24d
<start>
et<end>
pour cela. Pour référence, voir:h [range]
. C'est donc un peu plus souple que vous ne l'aviez prévu.Si vous avez affaire à des blocs délimités (par exemple, des balises de code ou XML / HTML), vous pouvez positionner le curseur au début du bloc et utiliser le mode visuel avec
%
pour sélectionner rapidement des blocs de code entiers, puis appuyer surd
pour les supprimer.la source
dap
pour supprimer un paragraphe,da(
,da{
,da[
, supprimer des blocs delimeted par des parenthèses, des accolades ou des crochets. Pour HTML, il existedat
, qui supprime une baliseda'
etda"
supprime des chaînes. Il y a aussi lesdip
,di(
, etc variantes, qui supprimera tout à l' intérieur des délimiteurs, mais laisser les délimiteurs intacte. Vous pouvez également utiliservap
(respvip
) pour sélectionner tous les paragraphes (resp interne). (Et alors il y ava(
etvi(
.) Ensuite il y acap
etcip
(ouca(
etci(
) pour supprimer et aller au mode insertion (c'est-à-dire "changer"). Etyap
pour tirerOutre tous les autres bons conseils, j'ajoute d+ Shift+ Lpour tout supprimer de la position actuelle du curseur à la dernière ligne visible à l'écran. En répétant la commande, vous tomberez relativement vite.
la source
Le plugin numbers.vim est très utile pour cela. C'est une manière améliorée de faire précéder chaque ligne d'un numéro de ligne. Comme
'number'
et'relativenumber'
, les deux réunis en un!Il est activé par défaut après l'installation. Vous souhaitez également l'ajouter
set number
à votre vimrc si vous ne le possédez pas déjà, car il se comporte de façon étrange si vous ne le possédez pas.En mode normal, cela ressemble à
:set relativenumber
:Il vous montre les numéros de ligne relatifs, à l' exception de la ligne sur laquelle le curseur est placé, où il indique le numéro de ligne absolu (7 dans ce cas).
Si nous passons ensuite en mode insertion , il se comportera comme si
number
c'était toujours affiché en affichant des numéros de ligne absolus:Il y a quelques options supplémentaires et quelques commandes (consultez la page d'accueil), mais les valeurs par défaut devraient fonctionner pour la plupart des gens.
la source
set number
,set relativenumber
alorsautocmd InsertEnter * :set norelativenumber
etautocmd InsertLeave * :set relativenumber
Une autre approche consiste à taper simplement si vous essayez de supprimer un motif spécifique d/
delim
Enter.la source
Vous pouvez utiliser la procédure normale de saisie dplus un mouvement (comme déjà expliqué dans les autres réponses). Le plugin EasyMotion, fournit de nouveaux mouvements que vous pouvez utiliser qui pourraient résoudre votre problème de manière rapide et facile.
Supposons que vous souhaitiez supprimer de la position actuelle du curseur jusqu'à la fin d'un mot donné à l'écran, les touches de mouvement seraient
<Leader>
<Leader>
e( comme si elles étaient ene
mouvement normal ). Ensuite, tapez la ou les lettres en surbrillance qui apparaissent à la fin du mot en question. Il y a aussi un mouvement de ligne de sorte que vous pouvez supprimer la ligne courante jusqu'à la ligne en question<Leader>
<Leader>
j.J'ai ma
<Leader>
clé pour ,. La commande complète est donc d<Leader>
<Leader>
e{lettre en surbrillance}.De
:help easymotion
:Modifier:
Le référentiel github d'EasyMotion est disponible à l' adresse https://github.com/Lokaltog/vim-easymotion .
Cette reddit sur les personnes utilisant easymotion pourrait être une lecture amusante.
la source
Il existe une solution simple qui peut résoudre votre problème.
Placez votre curseur au début du bloc de texte que vous souhaitez supprimer et faites-le
d50gg
.Cela supprimera toutes les lignes de votre position actuelle à la 50ème ligne de votre texte.
eq: si votre curseur est à la ligne 46 ,
d50gg
supprimera 4 lignes.la source
G
plutôt que gg car cela fonctionne également dans vi et:set number
est bien sûr toujours utile pour trouver le numéro de ligne de la ligne à laquelle vous voulez aller.Utilisez le mode visuel avec la surbrillance des lignes.
Je préfère cette méthode pour supprimer des blocs de code, car elle supprime des lignes entières par rapport à un simple mode visuel dans lequel vous devez positionner le curseur dans la colonne de droite pour supprimer ce que vous voulez.
la source
Je n'aime pas être
relativenumber
en permanence, alors j'ai configuré mon Vim pour l'activer uniquement lorsque je suis en mode visuel:Cela rend votre tâche facile:
car après avoir frappé, Vvous pouvez voir à quelle distance se trouve la ligne cible.
Cela peut s'avérer ennuyeux à long terme (le texte se déplace de droite à gauche lorsque le nombre relatif est activé / désactivé), mais jusqu'à présent, je l'apprécie beaucoup.
la source
v<Esc>d50j
?V
savoir si je sais que je vais effectuer une opération en ligne, puis je peux laisser led
dernier jusqu'à la fin, pour plus de confiance.Ce qui a bien fonctionné pour moi avec
vi
::set number
pour afficher le numéro de la ligne jusqu'à l'endroit où je voulais supprimer;Retournez à la ligne où la suppression devait commencer
d1290G
la source