Vi'deki birden çok satırı nasıl silebilirim?


129

Aşağıdakileri takip etmeye çalıştım:

VI editöründe seçili metin nasıl silinir

fakat

5dd

verir

E492: Düzenleyici değil komutu: 5dd

Sonra denedim:

5d

Bu sadece tek bir satırı siler. Birden çok satırı nasıl silebilirim?


2
Hatırladığım kadarıyla, 5dd geçerli bir sözdizimi olmalı ve imlecin üzerinde olduğu satırdan başlayarak 5 satırı silmeli. CAPS LOCK'un açık olması ve sayısal tuşların açıkken kaymasına neden olan bir klavye düzeni kullanmanız ihtimali var mı?
Eric J.

Yanıtlar:


132

Komutları komut modunda giriyormuşsunuz gibi geliyor (diğer adıyla "Eski mod"). Bu bağlamda :5d, 5 numaralı satırı kaldırırdı, başka bir şey yok. İçin 5ddolduğunu, imlecin başlayan beş izleyen satırları kaldırmak - - amaçlandığı gibi çalışmaya normal modda girin ve komutları önek yok :.



142

Satır numaralarını biliyorsanız, birden fazla (aralık) satırı silebilirsiniz:

:[start_line_no],[end_line_no]d

Not: d, silme anlamına gelir

burada,
start_line_no, silmek istediğiniz başlangıç ​​satırı no ve end_line_no, silmek istediğiniz bitiş satırı no'dur. Başlangıç ​​ve bitiş dahil olmak üzere başlangıç ​​ve bitiş arasındaki satırlar silinecektir.

Örneğin:

:45,101d

45 ile 101 dahil 45 ile 101 arasındaki satırlar silinecektir.


14
$Dosyadaki son satırı da belirtmek için kullanabilirsiniz . Yani :45,$d45'ten sonuna kadar her satırı silecekti.
freethebees

Hatta gibi Desenleri kullanabilirsiniz/<\/div>/
Björn

1
Aralığı şu anda bulunduğunuz yerden başlatmak istiyorsanız yapabilirsiniz:.,[end_line_no]d
Joe

15

Normal modda kullanım için listelenen komutlar ( :komut modu için ön ek ).
Vim'de test edilmiştir.

Satır miktarına göre:

  • numdd - mevcut imleç konumundan itibaren başlangıç ​​sayımını AŞAĞI sayı satırlarını siler (örneğin 5dd, geçerli satırı ve altındaki 4 satırı siler => mevcut satırı ve altındaki ( num-1 ) satırları siler )
  • numdk - num silecek akım hattı ve akım hattı kendisinden çizgiler kadar (örneğin, 3dkmevcut hattı ve bunun üzerinde 3 satır siler => mevcut hat ve siler num yukarıda çizgiler )

Satır numaralarına göre:

  • dnumG - satırları silecek akım hattından (dahil) YUKARI hattına sayı num (dahil) (imleç hattında şu anda ise mesela 5 d2Gsilecektir hatları 2-5 dahil)
  • dnumgg - hatlarını silecektir akım hattından (dahil) AŞAĞI satır numarası için num (dahil) (imleç hattında şu anda ise örneğin 2 d6gg2-6 satırları silin dahil olacak)
  • ( Sadece komut modu ) :num1 ,num2d - çizgileri siler satır numarası num1 (dahil) AŞAĞI satır numarası için NUM2 (dahil) . Not: eğer num1 büyüktür NUM2 - vim ile tepki vereceğiniBackwards range given, OK to swap (y/n)?

1
Bu bana yardımcı oldu çünkü num 'd' 'd'nin imlecin altını silmeye çalıştığını fark etmemiştim. İmlecim dosyanın altında imlecimin üstündeki satırları silmeye çalışıyordu! yardım için teşekkürler!
Jonathan Çad Faling

Keten numarasına göre silme: ': <start>, $ d' dosyanın sonuna kadar silecektir.
Devolus

11

Görsel olmayan bir mod yöntemini tercih ederseniz ve satır numaralarını kabul ederseniz, size başka bir basit yol önermek isterim.

Misal

45. satırdan 101. satıra kadar olan metni silmek istiyorum.

Yöntemim, komut modunda aşağıdaki bir komutu yazmanızı önerir:

45Gd101G

Okur:

45. satıra ( 45G) gidin, ardından dmevcut satırdan 101. satıra kadar metni ( ) silin (101G .

Not o vimsen kullanabilirgg yerineG .

@Bonnie Varghese'nin cevabıyla karşılaştırın:

:45,101d[enter]

Cevabından yukarıdaki komut, dahil olmak üzere 9 kez yazmayı gerektirir enter 8-10 kez yazmayı gerektirdiği yer gerektirir. Bu nedenle, yöntemimin bir hızı karşılaştırılabilir.

Şahsen ben kendim tercih 45Gd101Güzerinde :45,101dbu böyledir içinde, vi 'ın komutunun sözdizimi sopa gibi çünkü ben:

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+

8

d5d beş satırı "keser"

Genellikle ortadaki sayıyı şöyle atarım:

d7l = 7 harf sil


7

EscDüzenleme modunda olmadığınızdan emin olmak için tuşuna basın . İmleci silinecek ilk satırın üzerine yerleştirin. Girin :5dd. Mevcut satır ve sonraki dört satır silinmelidir.

Alternatif olarak, satır numaralandırmayı açtıysanız ...

EscDüzenleme modunda olmadığınızdan emin olmak için tuşuna basın . :#,#dSilinecek başlangıç ​​ve bitiş satır numaralarının '#' yerine geçtiği yeri girin .


Başlangıçta iki nokta üst üste ile çalıştığını düşünmüyorum.
Outcast

@PoeteMaudit Bunlar geçerli vi komutlarıdır. İki nokta üst üste, vi'nin imleci ekranın altına taşımasına ve bir satır düzenleme komutunu kabul etmesine neden olur.
Kenster

5
  1. Esc ekleme modundan çıkmak için
  2. :1enter 1. satıra gidin (ilgilendiğiniz satırla '1'i değiştirin)
  3. 5dd 5 satırı sil (mevcut satırdan)

Tür (numaralı satırlar için).:set number


3

Belirli bir satır tetiklemesinden SONRA bir aralığı silmek istiyorsanız, bunun gibi bir şey kullanabilirsiniz.

:g/^TMPDIR/ :.,+11d

Bu, her karşılaşmadan sonra 11 satırı (dahil) siler ^TMPDIR.


0

bu dxd, ddx değil

5 satırı silmek isterseniz, imleci silinecek ilk satırın başına getirin ve d5d


0

Tüm satırları silmek için şunu kullanın - ESC gg dG Birkaç satırı silmek için 5 diyelim ve ardından ESC 5dd kullanalım


-1

Aşağıdaki şekilde yapılabilir ..

  1. İmleci silmek istediğiniz yere konumlandırın.
  2. Görsel seçimi başlatmak için "v" ye basın.
  3. Ok tuşunu kullanarak imleci silmek istediğiniz konuma getirin.
  4. Satırları silecek "d" ye basın.
  5. Şimdi kaydedin ve ": x!" Kullanarak çıkın.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.