Yapın set foldmethod=expr
ve 'foldexpr'
katlama başlangıç noktalarını tanımlayacak bir vim komut dosyası ifadesi ayarlamak için kullanın .
set foldmethod=expr
set foldexpr=get(split(getline(v:lnum-1)),0,'')!=get(split(getline(v:lnum)),0,'')?'>1':'='
Bu, olduğundan daha karmaşık görünüyor, çünkü boşlukları kolayca kullanamıyoruz :set
, ancak boşluklarla ve bir satır veya 2 ile, şöyle görünüyor:
get(split(getline(v:lnum - 1)), 0, '') != get(split(getline(v:lnum)), 0, '')
\ ? '>1'
\ : '='
genel bakış
Temel olarak bu, her satırın ilk kelimesini bir önceki satırla karşılaştırır. Sözcükler farklıysa, satır katlamanın başlangıcıdır >1
. Aksi takdirde aynı kat seviyesini korur =
.
Zafer Ayrıntıları
set foldmethod=expr
Vim'e, katlamaları belirlemek için bir vim komut dosyası ifadesi kullanmasını söyleme
'foldexpr'
seçeneği vim komut dosyası ifadesini tutar
>1
Bir katlamanın =
ne zaman başlaması gerektiğini ve katlama düzeyinin ne zaman devam etmesi gerektiğini döndüren üçlü ile durumun değerlendirilmesi
v:lnum
'foldexpr'
kıvrımları güncellemek için üzerinde çalışmakta olan geçerli satırdır
- İçeriği geçerli satırın (
v:lnum
) ve önceki satırın ( v:lnum - 1
)getline()
- Her satırı şu kelimelere bölün:
split()
get()
Yeni bölünmüş kelimelerin ilk dizinini almak için kullanın
''
Boş satır olması durumunda varsayılan değerini kullanın . Örneğinget(words, 0, '')
- Geçerli satırın ilk sözcüğünü, üçgenin koşul bölümündeki bir önceki satırın ilk sözcüğü ile karşılaştırın
Not: Bu yöntemde çok büyük belgelerle ilgili bazı performans sorunları olabilir
Daha fazla yardım için bkz:
:h 'foldmethod'
:h 'foldexpr'
:h getline(
:h v:lnum
:h split(
:h get(