Hapus 100 baris dari vi editor menggunakan perintah tunggal

33

Saya menggunakan Ubuntu dan mencoba untuk menghapus semua 100 baris dari vieditor tetapi saya mendapat pertanyaan wawancara untuk melakukan ini dalam satu perintah.

mayur Mehta
sumber
Bukan solusi VI, tetapi dari baris perintah: echo -n > <file>menghapus semua baris dari file (sebenarnya hanya menimpa file dengan "").
azz
3
@Der Tidak perlu menggunakan echosama sekali untuk itu; > $fileberfungsi dengan baik.
CVn
4
Perusahaan macam apa itu, menanyakan pertanyaan vidalam sebuah wawancara?
CVn
2
Pertanyaan ini mudah dijawab dengan pengetahuan dasar vi. Pada komputer dengan vim yang terinstal (pada Ubuntu saya akan merekomendasikan vim-gtkpaket, karena itu memberi Anda akses ke xclipboard dalam vim), ketik vimtutordi baris perintah (bukan dalam vim) untuk mendapatkan tutorial interaktif dari dasar-dasarnya. Seharusnya tidak memakan waktu lebih dari setengah jam, dan ini adalah panduan pemula terbaik untuk menggunakan vi / vim yang mungkin Anda temukan.
evilsoup
1
@ MichaelKjörling Saya bisa membayangkannya muncul dalam sebuah wawancara jika pelamar telah menyebutkan pengalaman sebelumnya dengan vi(secara lisan atau dengan resume) atau jika pertanyaan diawali dengan, "Oke, sebagai sysadmin Anda harus tahu sesuatu tentang editor baris perintah, kan ? Anda pernah menggunakan vi? "
Wildcard

Jawaban:

62

Dalam mode normal, lakukan

100dd

ddmenghapus baris saat ini. Prefacing perintah dengan 100menyebabkannya mengulangi 100 kali.

Jika ada kurang dari 100 baris dalam file mulai dari baris saat ini, tergantung pada viimplementasinya, itu akan gagal untuk menghapus atau menghapus sebanyak yang ada. Dalam kasus vim, itu tergantung pada apakah opsi cpalias compatibleaktif atau tidak.

200_sukses
sumber
salah anwser itu hanya menghapus baris saat ini
mayur Mehta
Saya ingin menghapus 100 baris menggunakan satu perintah pada satu waktu
mayur Mehta
13
100ddadalah jawaban yang benar. Aku ingin tahu apa yang kamu lakukan.
ott--
1
@mayurMehta tidak tahu perusahaan mana yang mengajukan pertanyaan seperti ini, dan tidak tahu apa yang mereka harapkan sebagai jawabannya. Tetapi setiap pengguna VI pemula akan tahu bahwa 100dd adalah jawaban yang benar.
Munim
1
@ vgoff Saya tidak tahu .. Jika mereka tidak mencari solusi umum untuk menguji keterampilan vim dasar Anda, maka itu hanya pertanyaan jebakan untuk membuat orang yang diwawancarai bingung. Saya akan mengatakan 100dd adalah jawabannya. Jika pewawancara bertanya "Apa yang terjadi jika file memiliki kurang dari 100 baris dari kursor saat ini?", Saya akan menjawab: "Perintah menghapus apa yang bisa dari kursor saat ini." Itu sangat masuk akal. Kecuali pewawancara menjelaskan, mengapa kursor tidak berada di baris pertama? Saya benci pertanyaan jebakan seperti ini.
Munim
44
  1. hapus 100 baris ke depan dari (termasuk) yang sekarang

    • ulangi dd (hapus baris saat ini) 100 kali:

      100dd
      
    • hapus dari baris saat ini ke 99 baris ke depan

      d99j
      
  2. hapus 100 baris mundur dari (termasuk) yang sekarang

    d99k
    
  3. hapus baris dalam rentang tertentu dengan nomor baris

    :1,100d
    
  4. hapus baris dalam rentang yang dimulai dengan baris saat ini

    :.,.+99d
    

dll. dll

Tak berguna
sumber
2
nomor 4 akan menghapus baris saat ini (0) hingga 101 (0 + 100) baris, maka 101 baris bukan 100 yang diminta. coba:.,+99d
Olivier Dulac
Drat, dan saya punya gerakan yang benar! Terima kasih.
berguna
100dd juga tidak bekerja untuk saya - tetapi # 4 di atas berfungsi dengan baik untuk saya dalam VI di bawah Solaris 10.
DemiSheep
8

Jika semua baris dalam file harus dihapus, perintah vi ini menentukan kisaran penghapusan:

:1,$d

1menunjukkan baris pertama dan $menunjukkan baris terakhir

tersangka
sumber
atau :%d (dalam ":" konteks, ":% ..." adalah jalan pintas untuk ": 1, $ ...")
Olivier Dulac
juga bagus: d Gkunci & rarr; bunuh semua konten dari aktual [mis. baris atas] ke baris bawah
erch
3

Anda ingin menghapus semua baris dalam file? Buka file dengan vi. Sementara di awal baris pertama - lokasi default kursor ketika Anda baru saja membuka file - tekan Escdiikuti oleh dG.

Sekadar diketahui, tindakan dmengindikasikan delete, dan Gmenunjukkan baris terakhir file. Jadi, ketika pada sembarang baris yang Anda tekan dG, itu menghapus semua baris mulai dari baris saat ini sampai yang terakhir.

Jika Anda tahu mana garis berturut-turut untuk menghapus - katakanlah, dari baris 101-200 - ketik urutan kunci berikut: Esc:101,200d.

Barun
sumber
Tidak perlu menekan escape jika Anda baru saja membuka file dan berada di awal file. Anda secara otomatis (secara default) dalam mode normal.
vgoff
3

Tidak masalah di mana Anda berada dalam file, Anda dapat melakukannya ggdG

:%dakan lebih baik dalam penekanan tombol kurang. Nah, menghitung shiftdan enterkunci, sebenarnya dua penekanan tombol lebih dari yang di atas.

Melakukan sesuatu seperti 100ddhanya akan menghapus hingga 100 baris dari tempat Anda berada, dan itu mungkin tidak menghapus semua baris dari file, tergantung pada posisi baris Anda saat ini.

vgoff
sumber
0

Esc dan dd. n adalah jumlah baris untuk dihapus dari dan termasuk baris saat ini. Tekan tombol "Esc", lalu "n" dan kemudian "dd". Untuk meningkatkan pemahaman Anda

Rida Abid
sumber
Apa perlunya melarikan diri di sini
Prvt_Yadav
Jawaban ini identik dengan jawaban yang diterima.
Kusalananda
Escape untuk berjaga-jaga jika Anda dalam mode memasukkan.
Rida Abid