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.


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.


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.


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


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.


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.


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.