sayı v:lnum
küresel depolanır hattın katlama seviyesini belirten bir tamsayı sayı veya belirli formatının dizeye veren bir ifade içeren gerekiyordu foldexpr
seçenek ederiz değerlendirme anında değişken.
Bu foldexpr
örneğinin mantığını yukarıdan aşağıya doğru izleyelim. Üst düzeyde
getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
, bütün ekspresyon üçlü bir operatör
A ? B : C
olup.
A
sıfır olmayan olarak değerlendirilir ve
C
ifadesinin değeri aksi (
:help expr1
bakınız) operatör sonucu
B
ifade edilmesidir. Bu durumda,
B
'<1'
değişmez dize ve
C
( seviye belirticileri
:help fold-expr
bkz kat olarak
'<1'
ve
1
anlamını) numarası
1
olup. akım (
getline(v:lnum) =~ '^\\s*$' && getline(v:lnum+1) =~ '\\S'
Hem koşullar
getline(N) =~ S
getline
İşlev hattının içeriğini geri aynı biçime sahiptir:
A
sentezleme &&
operatör tarafından birleştirilmiş iki koşulları oluşur arabelleği, argüman olarak iletilen satır numarasıyla başvuruda bulunur (bkz. ). foldexpr
değerlendirildiğinde, v:lnum
değişkeni, katlama düzeyinin hesaplanacağı olmalıdır. , sol işleneninin sağ dize işlenen tarafından verilen düzenli ifadeyle eşleşir ve boolean değerini (expr4
bölümün sonuna yakın, özellikle, :help expr4
bakınız) döndürür olup olmadığını
=~
operatör testleri. Böylece A
durum '^\\s*$'
deseni ile eşleşen v:lnum
inci hattı ve hat yanındaki v:lnum
inci bir '\\S'
deseni ile eşleşen kontrol etmek için tasarlanmıştır.
Normal ifade desenleri, ifadede dize değişmezleri olarak belirtilmiştir. Dize değişmezleri iki sözdizimsel biçime sahiptir ve çift veya tek tırnak işareti kullanılarak alıntılanan olabilir. Bu formları arasındaki fark, çift tırnaklı dizgenin ters eğik çizgi ile başlayan çeşitli kontrol dizilerini içerebilmesidir. Bu sekanslar, kolaylıkla yazılmayan özel karakterlerinin belirtilmesine izin verir (örneğin çift tırnak, örneğin; \"
yazar). Diğer yandan tek tırnaklı dizgiler, diğer taraftan, , bu ters eğik sekanslara izin vermez. ( tek ve çift tırnaklı dizeleri tam açıklaması için :help expr-string
ve :help literal-string
bkz.)
çift tırnaklı dizeleri sözdizimi dikkate değer sonucu ters eğik çizgi sembolü kendisi kaçtı gerektiğini (\\
) 'dir. Bu nedenle, tekil alıntı dizeleri, genellikle düzenli ifadeleri belirtmek için kullanılır: sürekli olarak istenen ters eğik çizgi sembolünden kurtulmak için gerek yoktur, . Bununla birlikte, sayılı belgede, yukarıdaki numaralı desenlerde ters bölenlerin yine de kaçtıldığını görebilirsiniz. Bunun nedeni, bazı komutların (ters eğik çizgi dahil), Ex komutlarında (:set
, tabii ki dahil) özel anlamı vardır. Eğer isabet zaman (:help cmdline-special
bakınız) komutunu Vim önce bazı karakter dizileri yorumlamaktadır
:set foldexpr=...
başlatmak için girin. Özellikle, \\
dizisi, tek bir ters eğik çizgi olarak olarak işlem görür. , Satır numarası v:lnum
yalnızca boş karakterleri içerip içermediğini ifade testleri sırasında hattı yanındaki birlikte (numara v:lnum+1
) Bütün modülleri
bir boş olmayan karakter (:help pattern
kavramak örnekbiçimlerin anlamı bakınız sahip). Eğer öyleyse, ifade '<1'
dizgesini değerlendirir, aksi takdirde 1
numaralı sayıyı değerlendirir.
Harika bir açıklama için teşekkür ederiz. – xralf
Vay be .. gördüğüm en iyi ve ayrıntılı cevaplardan biri. Harika iş. – Cricrazy