Vim'de kod katlama nasıl etkinleştirilir ve kullanılır?


48

Vim'de kod katlamayı nasıl etkinleştirebilir ve yapabilirim ?

Herhangi bir şeyi değiştirmek zorunda ~/.vimrcmıyım?

Ben yazarken z+ ave z+ cve z+ ove hiçbir şey olmaz.

Katlama hakkında bir makale: Vim'de kod katlama .

Yanıtlar:


40

Hayır sen Gözlerinde farklı bağlantılı sayfadan komutu koymak gerekmez ~/.vimrc, sadece vermeden sonra bunları yazabilirsiniz :içinde vimkomut istemi alır.

Ancak satırları koyarsanız:

set foldmethod=indent   
set foldnestmax=10
set nofoldenable
set foldlevel=2

Verdiğiniz bağlantıda belirtildiği gibi, içinde, ~/.vimrcdosyada her zaman katlama kullanmak istediğinizde bunları yazmak zorunda değilsiniz. set nofoldenableAçılış, dosyaları "normal" olduğunda, yani katlanmış değil emin kılar.


Ben C tarafından yazılmış bir kod var, Yani fonksiyonlarından birinde kursiyer. Komuta gitmek için <kbd> esc </kbd> tuşuna basın, bu yüzden: zc yazıyorum ve hiçbir şey olmuyor.
Mohammad Reza Rezwani

1
@alex sonra zc yazmamalısınız :. Yazdığınız setkomutlar istemi sonra zaman yazmaya olsun :. zcÖzgürce imleci hareket ettirebilirsiniz zaman kullanabileceğiniz gibi sen, yazın ztimleç mevcut ekranın üstüne üzerindedir metni alır.
Anthon

39

Varsayılan olarak katla

Vim'in varsayılan katlama yöntemi, manualkatlamaların elle oluşturulduğu anlamına gelir; aksi takdirde, orada kapalı veya kullanılarak açılacak kat olduğu za, zoya da zcsen tarif edildiği gibi. Ama, bir kat oluşturabilir zf{motion}içinde normal modda veya zfiçinde Görsel modu; örn. zfj, geçerli hat için bir sonraki ve bir sonraki modu Normal modda oluşturur.

Katla indent

@Anthon tarafından kabul edilen cevap, katlama yönteminin nasıl ayarlanacağını açıklar indent; yani katlama, girintilerin seviyesi ile tanımlanır.

Katla syntax

Daha uygun bir şekilde, geçerli tamponun dil sözdizimini temel alarak kıvrımlar otomatik olarak oluşturulabilir. Eğer bir programlama dili kullanıyorsanız, diyelim L ve tanımını katlama gelmiş L (örneğin bir Vim eklentisi içinde katlama bilgi hangi yüklemiş L tanımlanır; örneğin c.vim C / C ++ veya piton -mode için Python), sadece katlama yöntemi ayarlamanız gerekir syntax:

set foldmethod=syntax

Bu kadar. Kıvrımlarla çalışmak için en yararlı komutlar:

  • zo imleçte bir kapak açar.
  • zShift+ oimleçteki tüm kıvrımları açar.
  • zc imleçteki bir klibi kapatır.
  • zmbir artar foldlevel.
  • zShift+ mtüm açık kıvrımları kapatır.
  • zrbir azalır foldlevel.
  • zShift+ rAzaltır foldlevelsıfıra - Bütün katların açık olacaktır.

14

Sistematik olarak kullanmak zorunda değilsiniz: Genellikle kıvrımları hareket veya bölümlere göre manuel olarak seçerim. Örneğin, bir paragrafın zfipkatlanması ve sonraki 20 satırın katlanması zf20j. zaGeçiş yapmak ve zdkaldırmak için kullanın .

Bu biraz daha fazla çalışma gerektirir ancak katlanmanızın eldeki görevi yansıtmasını sağlar.


4

foldingGeçerli oturumda @ Anthon'ın cevabı gibi etkinleştirebilirsiniz . Ancak bunu kalıcı hale getirmek istiyorsanız, en azından bu çizgiyi .vimrckatlama çalışmasına ayarlamalısınız:

set foldmethod=indent

indent katlama tür, daha fazla görebilirsiniz :help foldmethod

'foldmethod' 'fdm'      string (default: "manual")
                        local to window
                        {not in Vi}
                        {not available when compiled without the +folding
                        feature}
        The kind of folding used for the current window.  Possible values:
        fold-manual     manual      Folds are created manually.
        fold-indent     indent      Lines with equal indent form a fold.
        fold-expr       expr        'foldexpr' gives the fold level of a line.
        fold-marker     marker      Markers are used to specify folds.
        fold-syntax     syntax      Syntax highlighting items specify folds.
        fold-diff       diff        Fold text that is not changed.

Şimdi, bir dosyayı her açtığınızda vim, kodun ayarladığınız yöntemle katlandığını görebilirsiniz. Sonra kullanabilirsiniz za, zc, zo.


Vimrc kullanmaya gerek yok, sadece ara sıra katlama kullandığım için bunu yapmadım
Anthon

@Anthon: Ah, elbette. Cevabımda daha fazla bilgi ekleyeceğim.
cuonglm
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.