Aşağıdaki metin varsa:
foo
bar
Görsel olarak seçiyorum ve kopyalıyorum.
Metin şimdi adlandırılmamış kayıtta saklanır "ve içeriği (çıktısı :reg "):
"" foo^Jbar^J
Bu grafiğe göre , ^Jbir Satır Beslemesi için düzeltme işareti olduğu anlaşılıyor .
Ben ayazarak kayıttaki adsız kayıt çoğaltmak istiyorsanız : :let @a = @"
İşte içeriği (çıktı :reg a):
"a foo^Jbar^J
Değişmedi.
Şimdi yazarak arama kaydında çoğaltırsanız :let @/ = @", işte içeriği (çıktısı :reg /):
"/ foo^@bar^@
Önceki grafiğe göre, ^@Null karakter için işaret gösterimi gibi görünüyor .
Neden Satır Besleme otomatik olarak arama kaydının içinde Boş karaktere dönüştürülür (ancak akayıt değil )?
Adsız kaydı komut satırına (veya sonra bir arama içine /) eklersem :<C-R>", yazarak şunu eklersiniz:
:foo^Mbar^M
Yine, son grafiğe göre, ^Mbir Taşıt Dönüşü için caret gösterimi gibi görünüyor.
Bir Satır Beslemesi neden otomatik olarak komut satırında Satır Başı'na dönüştürülür?
Düzenle :
Genellikle aşağıdakileri yazarak bir gerçek kontrol karakteri ekleyebilirsiniz:
<C-V><C-{character in caret notation}>
Örneğin, <C-R>yazarak bir değişmez değer ekleyebilirsiniz <C-V><C-R>.
Görünüşe göre herhangi bir kontrol karakteri için yapabilirsiniz.
Ancak ben bir arabellek içine veya komut satırına değişmez bir LF ekleyemediğimi fark ettim, çünkü ben yazarsanız: <C-V><C-J>ekler ^@, yerine boş bir karakter ekler ^J.
Aynı nedenden ötürü bir LF, arama yazmacı içinde NUL değerine dönüştürülür mü?
Düzenleme 2 :
İçinde :h key-notation, bunu okuyabiliriz:
<Nul> zero CTRL-@ 0 (stored as 10) <Nul>
<NL> linefeed CTRL-J 10 (used for <Nul>)
stored as 10İlk satırda ve bölüm used for <Nul>ikinci satırda bir LF ve NUL arasındaki örtüşme çeşit var olduğunu gösterebilir ve aynı şey olarak yorumlanabilir. Sonra önceki komutu yürütülürken, çünkü Ama, aynı şey olamaz :let @/ = @"ben yazarsanız, n2 hatlarının sonraki geçtiği almak için normal modda foove baryerine olumlu maçı alma, aşağıdaki hata mesajım var:
E486: Pattern not found: foo^@bar^@
Bu bağlantının yanı sıra , bir NUL değerinin bir dizenin sonunu, LF ise bir metin dosyasındaki satırın sonunu ifade ettiğini açıklamaktadır.
Ve bir NUL stored as 10yardımın söylediği gibi, bir LF ile aynı kod ise, Vim 2 arasındaki farkı nasıl oluşturabilir?
Düzenleme 3 :
Belki bir LF ve bir NUL 10yardımda belirtildiği gibi aynı ondalık kodla kodlanmıştır . Ve Vim bağlam sayesinde 2 arasındaki farkı yaratıyor. Ondalık kodu 10arabellekte veya herhangi bir kayıtta bulunan, arama ve komut kayıtları dışında bir karakterle karşılaşırsa, karakteri LF olarak yorumlar.
Ancak arama kaydında ( :reg /) onu bir NUL olarak yorumlar, çünkü bir arama bağlamında Vim, yalnızca bir kavramın end of line in a filemantıklı olmadığı bir dizeyi arar, çünkü bir dize bir dosya değildir ( atomu \naranan bir desende kullanmaya devam ediyor , ama belki de bu normal ifade motorunun sadece bir özelliği?). Böylece otomatik 10olarak bir NUL olarak yorumlanır çünkü en yakın kavramdır ( end of string≈ end of line).
Aynı şekilde, komut satırı / komut registerında ( :reg :) kodu 10CR olarak yorumlar , çünkü burada kavramı end of line in a filemantıklı değildir. En yakın kavramdır end of commandVim yorumladığını böylece 10vurma, çünkü bir CR olarak Enterbir komut çalıştırmak / sona yoludur ve CR isabet aynıdır Enterolduğunda sizi bir edebi biri insert beri <C-V><Enter>, ^Mgörüntülenir.
Belki de kodu olan karakterin 10bağlama göre değişmesi:
- arabellekte satır sonu (
^J) - aramadaki dizenin sonu (
^@) - komut satırında komutun sonu (
^M)
someFunction(arg1, "")arg 2 "" yani "tam anlamıyla hiçbir şey olmayan tırnaklar arasındaki öğe - bir" boş ". NULL görünebilir, çünkü" dize sınırlandı gibi temel C uygulaması tarafından eklenmiştir ". bunu nasıl kontrol edeceğinizi - ancak olası bir neden olarak akla geliyor.
\rve \nfarklılığa bakın:substitute .
NULLkarakterlerin ortaya çıkması , dizeleri işleyen temel C işlevinden kaynaklanır. Bu C dizeleri nasıl işlediğini açıklaması sen bağlantılı olduğu dahili C dizelerle sınırlayan açıklıyorNULL.NULLmetinlerde nadiren bu amaç için iyi bir karakter olmasını sağlar. Bunun bir sonucu olarak, C programı (vim) dahili bir C fonksiyonuna "boş" bir dizge