Vim'de çoklu katlama yöntemleri


9

Vim katlama seçeneğini oldukça kullanıyorum ve genellikle foldmethod'u sözdizimine ayarladım . Son zamanlarda, tüm blokları koyabileceğim /*{{{*/ve /*}}}*/bir kaynak dosyasının büyük bölümlerini birlikte gruplandırmak için çok yararlı olacak şekilde özel kıvrımlar eklemenin mümkün olduğunu keşfettim . Ancak bu özelliği kullanmak için işaretleyiciye katlama yöntemini ayarlamam gerekiyor ve sözdizimi katlamasını gevşetiyorum.

Vim'de aynı anda iki aktif katlama yöntemine sahip olmak mümkün müdür? set foldmethod=syntax,markerçalışmıyor.

Yanıtlar:


4

Hayır, açıkçası, Vim'de aynı anda birden fazla katlama yönteminin etkin olması mümkün değildir.

Sözdizimi vurgulama kurallarının nasıl yazılacağını öğrenmek ve işaretçi katlama öykünmesi eklemek istediğiniz dil için vurgulama dosyasını hacklemek istiyorsanız işaretçi tabanlı katlamayı taklit edebilirsiniz. Bunu yapmanın birkaç dezavantajı vardır:

  1. Katlama yöntemi "sözdizimi" olarak ayarlandığında işaretleyici ve manuel katlama yöntemleriyle çalışan bir kat ("zf", "zd" vb.) Oluşturma / kaldırma komutları çalışmaz.

  2. Belirteçler taklit bu "kuvvet" kat seviyesi (örneğin, " {{{1'/' }}}1') (örneğin,' tek kat daha fazla artan / azalan karşı {{{'/' }}}") bir sorun; katlama düzeyi sayılarını tamamen görmezden gelmeniz ya da sözdizimi tabanlı katlama kurallarının geri kalanına müdahale etme ve muhtemelen kırma şansını yakalamanız gerekir.

İşaretçi tabanlı katlamaya ihtiyacınız olduğunu bulduğunuzda, bu yöntemi tamamen kullanmanızı öneririm. Ekstra zaman ve çaba gerektirebilir, ancak gerçekten esnekliğe ihtiyacınız varsa, özellikle ikisini birleştirmeye çalışmanın zorlukları düşünüldüğünde buna değebilir.


2

Ben de aynı şeyi arıyordum. Sözdizimi dosyasını hacklemek istemediğim için, bunun yerine katlama yöntemleri arasında geçiş yapmak için bir eşleme var. Şu anda sadece sözdizimi ve işaretleyici arasında geçiş yapıyorum:

nmap <Leader>ff :call <SID>ToggleFold()<CR>
function! s:ToggleFold()
    if &foldmethod == 'marker'
        let &l:foldmethod = 'syntax'
    else
        let &l:foldmethod = 'marker'
    endif
    echo 'foldmethod is now ' . &l:foldmethod
endfunction
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.