Satır referansı farklılıklarını şu yollarla anlama: g / ^ / norm ve:: norm


8

Diyelim ki çok basit bir dosyam var

a
b
c
d
e

ve her satırdan sonra boş satır eklemek istediğime karar verdim. Birkaç farklı yöntem hemen aklıma geldi. Biz belki sadece bunu (ve dolayısıyla kucaklama yetmezliği). Bir makroyu kaydedebilir qqo<ESC>jqve birkaç kez tekrarlayabiliriz.

O zaman diğer iki yöntem bana daha açık geldi.

İlk olarak, her satıra :normkomut vereceğimi düşündüm o. Ben de koşuyorum :%norm o. Ama aslında olan şu ki, 5 boş satır ve ardından yukarıdaki gibi ayrılmamış satırlar alıyoruz. Bunu %norm, vim'in mesaj sorununu bu beş satır dosyasının ilk beş satırında aşağıdaki normal komutu aldığını ifade ettiği için yorumluyorum . oKomut yeni bir çizgi oluşturur ve vim bazı diğer tanımlayıcı tarafından gerçekte satır sayısına göre başvuran ve bu anlamda "aptal" dır.

Utanmıştım. Elbette. Yukarıdaki yöntemin çalışıp çalışmadığını görmek için birkaç şey denedim, ama ne yazık ki yapamadım. Meraktan, diğer favori toplu uygulama yöntemimi denedim. Bu beni denemeye yönlendirdi :g/^/norm o. Benim için şaşırtıcı, bu iyi çalışıyor! Yani gözlerime göre, vim burada yukarıdaki gibi "aptal" değil ve satırları satır numarasından daha fazla referans alıyor.

Tam olarak neler oluyor?


2
Bir yan not: Ayrıca böyle yapabilirsiniz: :%s/$/\r/ya böyle: :%s/\n/\r\r/. Paket, yeni satırların eşleştirilebileceği \n, ancak \rdeğiştirme değerlerinde olduğu gibi yazılması gerektiği .
lcd047

Yanıtlar:


9

Peki, %kısayol 1,$(ilk satırdan sonuncuya kadar olan aralık). Gönderen :he :%:

Line numbers may be specified with:             :range E14 {address}
        {number}        an absolute line number
        .               the current line                          :.
        $               the last line in the file                 :$
        %               equal to 1,$ (the entire file)            :%

Ve için :global:

The global commands work by first scanning through the [range] lines and
marking each line where a match occurs (for a multi-line pattern, only the
start of the match matters).
In a second scan the [cmd] is executed for each marked line with its line
number prepended.  For ":v" and ":g!" the command is executed for each not
marked line.  If a line is deleted its mark disappears.

Yani, ilk durum, listeyi değiştirirken geçiş yapmak gibidir, böylece liste öğelerindeki bir sayaç geçersiz hale gelir. İkinci durumda, hedeflemek istediğimiz öğeleri bir geçişte işaretliyoruz, böylece liste ikinci geçişte değiştirilse bile, hangi öğeler üzerinde çalışmak istediğimizi hala biliyoruz.


Ah, küresel için yardım dosyasında bile. Ne kadar aptalım. Thank you
davidlowryduda

adam - g aşırı deli deli yararlıdır. ortalama vi kullanıcı güç kullanıcı gitmek için daha fazla zaman harcamak lazım
javadba
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.