Aynı anda çoklu vim katlama yöntemlerini kullanmanın bir yolu var mı?


14

Ben foldmethod=indentkendime yerleştim ~/.vimrcve genel olarak bu benim için işe yarıyor ve bende kalmasını istiyorum.

Ancak, düzenli olarak düzenlediğim (ve özel kontrolüm altında olan), işaretleyici tabanlı bir sisteme eklemek istediğim, özellikle dosyayı açtığım zaman, birkaç dosya var. (girintiyle zaten 'sınırlandırılmış') nadiren bakınca önceden katlanmış. Öyle görünüyor foldmethod=marker(ben gerekirse bu 'öncesi kıvrımlar' göstermek için dosyadaki garip yorumunu umursamıyorum), ama yine de istiyorum bana bunu sağlayacak foldmethod=indentı kullanın böylece set zc, zoardından vb, ve bölümleri girinti ile katlayın veya açın. Söyleyebildiğim kadarıyla, bende bende birden fazla değer ayarlayamıyorum.

Bunu başarabileceğim başka bir yol var mı (ideal olarak dosyanın içine gömülü bir şey kullanmak)?


Aynı zamanda hem katlama hem de marker çalışma yöntemini aynı anda kullanmaya çalışıyorum. Ayrıca, katlama ifadesini kullanmanın en iyi seçenek olduğuna inanıyorum. Hem girintiye hem de işaretçiye uygun bir ifade buldunuz mu?
Jp_

1
@Jp_ hayır, 'dolandırıcılık değil.
Andrew Ferrier

Yanıtlar:


10

Her pencerenin kendi yerel değeri olabilir 'foldmethod'; Ayarladığınız ~/.vimrcşey sadece küresel varsayılandır. Belirli bir arabellek için farklı bir yerel değer belirlemenin birden fazla yolu vardır :

  1. El ile :setlocal foldmethod=marker
  2. Belirli bir dosya türü için (örneğin, Java dosyaları): :autocmd FileType java setlocal foldmethod=marker(veya içinde ~/.vim/after/ftplugin/java.vim)
  3. Belirli dosyalar için: :autocmd BufRead /path/to/file setlocal foldmethod=marker
  4. Dosyanın içinde bir modelin aracılığıyla (yine de işaretleri eklemek zorunda olduğunuzdan bunu tercih ederim):

/* vim: set fdm=manual : */

Yine de sadece bir kat yöntem olabilir içine tek bir pencere. Farklı stratejiler kullanmak istiyorsanız, daha esnek bir yöntem (örn. expr) Seçmeli ve orada "diğer" yöntem (ler) i tekrar uygulamalısınız (örneğin 'foldexpr', girintinizi göz önünde bulundurarak). Ya da aynı tampon için iki pencere bölmesi kullanıyorsunuz ve her bölme için farklı kat rozetleri ayarlıyorsunuz.

Muhtemelen duymak istediğin şey :autocmd CursorMovedbu olmadığından, şu anki çizgiye dayanarak katlanşimi değiştiren bir şeyle birlikte kesebilirsin:

" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')

1
Teşekkürler. Bu da bana bu tamponun içindeki işaretleyiciye kattodu ayarlayabileceğimi söyledi. Ama aradığım şey, hala bir katlanmış (bazı girinti ile sınırlandırılmış) bazı bölümleri önceden katlanmış halde iken, girintili katlamalı metadu kullanmama izin veren bir şey . Ben yaparsanız (4) Yukarıdaki zc, zobu tampon içerisinde amaçlandığı gibi ve benzeri artık çalışmaz. Sorumu açıklığa kavuşturdum.
Andrew Ferrier

Sorunuz bu açıdan net değildi, açıklama için teşekkürler. Cevabımı değiştirdim.
Ingo Karkat

Evet, açık olmasaydım özür dilerim. Foldexpr en iyi yaklaşım gibi görünüyor ama aynı zamanda karmaşık. Yine de deneyeceğim. İşaretçi için +1.
Andrew Ferrier

Tekrar teşekkürler. Foldexpr yazmaya çalışıyorum ve ilginizi çekebilecek ilgili bir Q açtım: superuser.com/questions/560167/…
Andrew Ferrier

@IngoKarkat: Çizginin altındaki ilk paragrafta, tampon başına yalnızca bir katlama yöntemi olabileceğini yazdınız . Bunun pencere başına olması gerektiğine inanıyorum .
garyjohn
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.