Neden Vim için yeni satır?


255

Söz itibaren nasıl Vim bir satır için bir karakter yerine? . Bunun gibi yeni bir satır için metin değiştirirken \ r kullanmanız gerekir.

:%s/%/\r/g

Ancak bir karakterin satır sonlarını ve satırsonlarını değiştirirken şöyle yapabilirsiniz:

:%s/\n/%/g 

Kılavuzun hangi bölümü bu davranışları belgeliyor ve bunların ardındaki mantık nedir?


1
Nedir %arama ve değiştirirken için?
qed

7
@qed: varsayılan olarak :syalnızca geçerli satıra ikame uygular. :%sdosyanın tamamını ele alır. Daha fazlası .
c24w

3
+ c24w Bence eğik çizgiler arasında '%', ilk örnek '%' arama konumunda ve ikinci örnekte değiştirme konumunda söz ediyor, ancak sorunuzu cevaplamak için @qed, bu '% kelimesi tam anlamıyla eşleştirilir.
RastaJedi

Yanıtlar:


156

Gönderen kalıpları vim docs :

\r <CR> ile eşleşir

\n satır sonu ile eşleşir - Arabellek metni yerine bir dizede eşleşirken değişmez yeni satır karakteri eşleştirilir.


41
Benim için karışıklık şu ki \ r ve \ n kullanıldıklarında arama örüntüsü ve değiştirme örüntüsü farklı şeyler ifade ediyor.
dlamblin

3
@dlamblin Yup! Cevabımı gör :)
Sınırlı Kefaret


114

Bunun bir başka yönü \0, geleneksel olarak NULL olan, s//\0/"bütün eşleşmiş örüntü" anlamına gelir. (Bu arada, gereksizdir ve daha uzundur &).

  • Yani \0demek için kullanamazsın NULL, yani\n
  • Yani \ndemek için kullanamazsın \n, yani kullanırsın \r.
  • Yani \rdemek için kullanamazsın \r, ama kime bilerek eklemek istediğini bilmiyorum.

-☈


1
İyi bir nokta! Yani bu \ 0 etrafında bir hack - 0. iç içe gruba geri başvuru - bütün normal ifade. Bu çok iyi bir cevap, ama beni yerine kullanılamaz ki, dissapointed yapar ... (yani: # (13) eklemek, örneğin "normal" bir dosya (== unix EOLs).
Tomasz Gandor

3
Tamam, cevap Vim belgelerinde. Normal bir ters eğik çizgiyle \ ^ M veya \ <CR> 'dan kaçmanız yeterlidir. Güzel. ----- <CR> bu noktada ikiye bölünmüş satır (CTRL-V <Enter> olarak <CR> yazın) s <CR> \ r idem -------- s / \ r \ < CR> bir satır başı (CTRL-M) girin (<CR> öğesini CTRL-V <Enter> olarak yazın) s / \ <CR>
Tomasz Gandor

16
"Başka bir yön" mi? Çok mütevazısın! Bunun neden olduğunu tam olarak açıklamak, etrafta nasıl çalışılacağını söyleyen herkese üstün bir cevap verir . +1
underscore_d

Dürüst olmak gerekirse , arama ve değiştirme modellerinde neden farklı anlamlar olduğu konusunda gerçekten büyük bir içgörü \n. Harika bir cevap.
ZeroKnight

47

:help NL-used-for-Nul

Teknik detay:

<Nul>dosyadaki karakterler bellekte olduğu gibi saklanır <NL>. Ekranda " ^@" olarak gösterilir . Çeviri dosyaları okurken ve yazarken yapılır. A'yı<Nul> bir arama modeliyle eşleştirmek için CTRL- @ veya " CTRL-V 000" girmeniz yeterlidir . Muhtemelen beklediğiniz budur. Dahili olarak karakter, <NL>arama modelinde a ile değiştirilir . Alışılmadık olan şey CTRL-V CTRL-J yazmanın da a ekler <NL>, böylece <Nul> dosyada bir de arar . {Vi <Nul>, dosyadaki karakterleri hiç işleyemiyor }



10

Her şeyden önce, :h :s"Değiştir" ile ilgili belgelerin "4.2 Yedeği" bölümünü görmek için açın . Komutun kabul ettiği:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

Hakkında açıklama edin patternvestring

İçin {pattern}See |pattern|.
{string}gerçek bir dize veya
özel bir şey olabilir ; bakın |sub-replace-special|.

Artık arama deseninin ve değiştirme desenlerinin farklı kurallara uyduğunu biliyorsunuz. Bağlantısını takip ederseniz, sizi |pattern|Vim'de kullanılan tüm normal ifade kalıplarını açıklayan bölüme götürür.

Bu arada, |sub-replace-special|aralarında \rsatır kesmesi / bölünmesi için olan ikame modellerini içeren "4.2 Yedeği" alt bölümüne götürür .

(Kılavuzun bu kısmının kısayolu şudur :h :s%)

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.