Elimina 100 righe dall'editor vi usando un singolo comando


33

Sto usando Ubuntu e sto cercando di eliminare tutte le 100 righe vidall'editor, ma ho avuto l'interrogatorio di farlo in un solo comando.


Non una soluzione VI, ma dalla riga di comando: echo -n > <file>rimuove tutte le righe da un file (in realtà sovrascrive il file con "").
azz

3
@Der Non c'è bisogno di usare echoaffatto per quello; > $filefunziona benissimo.
un CVn il

4
Di che tipo di azienda si tratta, ponendo domande viin un'intervista?
un CVn il

2
A questa domanda si risponde facilmente con una conoscenza rudimentale di vi. Su un computer con vim installato (su Ubuntu consiglierei il vim-gtkpacchetto, dal momento che ti dà accesso alla xclipboard all'interno di vim), digita vimtutordalla riga di comando (non all'interno di vim) per ottenere un tutorial interattivo delle basi. Non dovrebbe richiedere più di mezz'ora ed è la migliore guida per principianti all'uso di vi / vim che probabilmente troverai.
evilsoup,

1
@ MichaelKjörling Potrei immaginarlo in un'intervista se il richiedente avesse menzionato una precedente esperienza vi(verbalmente o per riprendere) o se la domanda fosse preceduta da "Okay, come amministratore di sistema devi sapere qualcosa degli editor della riga di comando, giusto ? Hai usato vi? "
Wildcard

Risposte:


62

In modalità normale, fallo

100dd

ddelimina la riga corrente. La prefazione di quel comando con lo 100fa ripetere 100 volte.

Se ci sono meno di 100 righe nel file a partire dalla riga corrente, a seconda videll'implementazione, non riuscirà a eliminare alcuna o eliminare quante ne esistono. Nel caso vim, ciò dipende dal fatto che l' opzione cpaka compatiblesia attiva o meno.


risposta errata sta solo cancellando la riga corrente
mayur Mehta,

Voglio cancellare 100 righe usando un solo comando alla volta
Mayur Mehta,

13
100ddè la risposta corretta. Mi chiedo cosa stai facendo.
ott--

1
@mayurMehta non sa quale azienda sta ponendo domande come questa e non sa cosa si aspettano come risposta. Ma qualsiasi utente VI alle prime armi saprà che 100dd è la risposta corretta.
Munim,

1
@vgoff Non lo so .. Se non sono alla ricerca di una soluzione generale per testare le tue abilità vim di base, allora è solo una domanda trabocchetto per sorprendere gli intervistati. Direi che 100dd è la risposta. Se l'intervistatore chiede "Cosa succede se il file ha meno di 100 righe dal cursore corrente?", Risponderei: "Il comando cancella ciò che può dal cursore corrente". Questo è perfettamente ragionevole. A meno che l'intervistatore non chiarisca, perché il cursore non dovrebbe essere sulla prima riga? Odio domande come queste.
Munim,

44
  1. cancella 100 righe in avanti (compresa) da quella corrente

    • ripeti dd (elimina riga corrente) 100 volte:

      100dd
      
    • elimina dalla riga corrente a 99 righe in avanti

      d99j
      
  2. elimina 100 righe all'indietro da (incluso) quella corrente

    d99k
    
  3. elimina le righe in un intervallo specifico per numero di riga

    :1,100d
    
  4. elimina le righe in un intervallo che inizia con la riga corrente

    :.,.+99d
    

ecc ecc.


2
il numero 4 eliminerà la riga corrente (0) fino alla 101esima (0 + 100) righe, quindi 101 righe invece delle 100 richieste. provare:.,+99d
Olivier Dulac,

Drat, e ho ottenuto quelli corretti! Grazie.
Inutile

Anche 100dd non ha funzionato per me - ma il n. 4 sopra funziona bene per me in VI sotto Solaris 10.
DemiSheep

8

Se tutte le righe nel file devono essere eliminate, questo comando vi specifica l'intervallo di eliminazione:

:1,$d

1indica la prima riga e $indica l'ultima riga


oppure :%d (in ":" contesto, ":% ..." è una scorciatoia per ": 1, $ ...")
Olivier Dulac,

anche bello: d Gkeys & rarr; uccidere tutti i contenuti dall'effettivo [es. linea superiore] alla linea di fondo
erch

3

Vuoi eliminare tutte le righe in un file? Apri il file con vi. Mentre all'inizio della prima riga - la posizione predefinita del cursore quando si apre il file - premere Escseguito da dG.

Solo per notare, l'azione dindica Elimina e Gindica l'ultima riga del file. Quindi, mentre in qualsiasi linea premete dG, cancella tutta la linea a partire dalla linea corrente fino all'ultima.

Se si sa quale righe consecutive di eliminare - per esempio, dalla linea 101-200 - digitare i seguenti sequenze di tasti: Esc:101,200d.


Non è necessario premere Esc se hai appena aperto il file e sei all'inizio del file. Si passa automaticamente (per impostazione predefinita) in modalità normale.
vgoff,

3

Non importa dove ti trovi nel file, puoi farlo ggdG

:%dfarebbe meglio a premere meno tasti. Bene, contando i tasti shifte enter, in realtà due più pressioni di tasti rispetto a quanto sopra.

Fare qualcosa del genere 100ddeliminerebbe solo fino a 100 linee da dove ti trovi e ciò potrebbe non eliminare tutte le linee dal file, a seconda della posizione corrente della linea.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.