Supprimer 100 lignes de l'éditeur vi en une seule commande

33

J'utilise Ubuntu et j'essaie de supprimer les 100 lignes de l' viéditeur, mais j'ai eu la question de l'entrevue de le faire en une seule commande.

Mayur Mehta
la source
Pas une solution de VI, mais à partir de la ligne de commande: echo -n > <file>supprime toutes les lignes d'un fichier (remplace simplement le fichier par "").
azz
3
@Der Pas besoin d'utiliser echodu tout pour cela; > $filefonctionne très bien.
un CVn
4
De quel type d'entreprise s'agit-il, qui pose des questions vidans une interview?
un CVn
2
Il est facile de répondre à cette question avec une connaissance rudimentaire de vi. Sur un ordinateur sur lequel vim est installé (sur Ubuntu, je recommanderais le vim-gtkpaquet, car cela vous donne accès au xclipboard dans vim), tapez vimtutorsur la ligne de commande (pas dans vim) pour obtenir un didacticiel interactif sur les bases. Cela ne devrait pas prendre plus d’une demi-heure et c’est le meilleur guide de démarrage pour utiliser vi / vim que vous êtes susceptible de trouver.
Evilsoup
1
@ MichaelKjörling Je pouvais imaginer que cela arriverait dans une interview si le demandeur avait soit mentionné une expérience antérieure avec vi(verbalement ou par CV) ou si la question avait été précédée de la mention suivante: ? Vous avez utilisé vi? "
Wildcard

Réponses:

62

En mode normal, faites

100dd

ddsupprime la ligne en cours. Si vous préférez cette commande, 100elle se répète 100 fois.

S'il y a moins de 100 lignes dans le fichier à partir de la ligne actuelle, en fonction de l' viimplémentation, il ne parviendra pas à supprimer toutes les lignes ou supprimera autant qu'il en existe. Dans le cas de vim, cela dépend si l' option cpaka compatibleest activée ou non.

200_success
la source
mauvaise réponse, il ne fait que supprimer la ligne actuelle
Mayur Mehta
Je veux supprimer 100 lignes à l'aide d'une commande à la fois
Mayur Mehta
13
100ddest la bonne réponse. Je me demande ce que tu fais.
ott--
1
@mayurMehta ne sait pas quelle entreprise pose des questions comme celle-ci, et ne sait pas à quoi elle s'attend. Mais tout utilisateur de VI novice saura que 100dd est la bonne réponse.
Munim
1
@vgoff Je ne sais pas. S'ils ne recherchent pas de solution générale pour tester vos compétences de base en vim, il ne s'agit que d'une question piège à poser aux personnes interrogées. Je dirais que 100dd est la réponse. Si l'intervieweur demande "Que se passe-t-il si le fichier contient moins de 100 lignes du curseur actuel?", Je répondrais: "La commande supprime ce qu'elle peut du curseur actuel". C'est parfaitement raisonnable. À moins que l'intervieweur ne clarifie la question, pourquoi le curseur ne serait-il pas sur la première ligne? Je déteste les questions pièges comme celles-ci.
Munim
44
  1. supprimer 100 lignes en avant de celle en cours

    • répéter dd (supprimer la ligne actuelle) 100 fois:

      100dd
      
    • supprimer de la ligne en cours à 99 lignes en avant

      d99j
      
  2. supprimer 100 lignes en arrière de la ligne actuelle

    d99k
    
  3. supprimer des lignes dans une plage spécifique par numéro de ligne

    :1,100d
    
  4. supprimer des lignes d'une plage commençant par la ligne actuelle

    :.,.+99d
    

etc.

Inutile
la source
2
le numéro 4 supprimera la ligne actuelle (0) jusqu'à la 101e (0 + 100) lignes, d'où 101 lignes au lieu des 100 demandées. try:.,+99d
Olivier Dulac
Drat, et j'ai les mouvements corrects! Merci.
Inutile
100dd n'a pas fonctionné pour moi non plus - mais le numéro 4 ci-dessus fonctionne bien pour moi dans VI sous Solaris 10.
DemiSheep
8

Si toutes les lignes du fichier doivent être supprimées, cette commande vi spécifie la plage de suppression:

:1,$d

1désigne la première ligne et $désigne la dernière ligne

suspect
la source
ou :%d (dans ":" contexte, ":% ..." est un raccourci pour ": 1, $ ...")
Olivier Dulac
aussi bien: d Gclés & rarr; tuer tout le contenu de l'actuel [par exemple la ligne du haut] à la ligne du bas
erch
3

Vous voulez supprimer toutes les lignes d'un fichier? Ouvrez le fichier avec vi. Au début de la première ligne (emplacement par défaut du curseur lorsque vous ouvrez le fichier), appuyez sur, Escpuis sur dG.

Il suffit de noter que l’action dindique supprimer et Gindique la dernière ligne du fichier. Ainsi, quelle que soit la ligne que vous appuyez sur dG, elle supprime toute la ligne allant de la ligne actuelle à la dernière.

Si vous savez quelles lignes consécutives à supprimer - par exemple, de la ligne 101 à 200 - type dans les séquences de touches suivantes: Esc:101,200d.

Barun
la source
Inutile d'appuyer sur échap si vous venez d'ouvrir le fichier et que vous vous trouvez au début du fichier. Vous êtes automatiquement (par défaut) en mode normal.
vgoff
3

Peu importe où vous êtes dans le fichier, vous pouvez le faire ggdG

:%dferait mieux en moins de touches. Eh bien, en comptant les touches shiftet, vous enteravez en fait deux touches de plus que les précédentes.

Faire quelque chose comme 100ddsupprime seulement jusqu'à 100 lignes de votre position et ne supprimera peut-être pas toutes les lignes du fichier, en fonction de votre position actuelle.

vgoff
la source
0

Esc ndd. n est le nombre de lignes à supprimer de et incluant la ligne en cours. Appuyez sur le bouton "Esc", puis sur "n" et ensuite sur "dd". Pour améliorer votre compréhension

Rida Abid
la source
Quel est le besoin d'évasion ici
Prvt_Yadav
Cette réponse est identique à la réponse acceptée.
Kusalananda
Escape est juste au cas où vous êtes en mode insertion.
Rida Abid