Vim'in kod katlamasını nasıl çoğaltabilirim?


28

Emacs'ta kod katlama

Bazen bir metin bloğunu katlamak istiyorum. Vim'de fuzz olmadan kolayca katlanabiliyorsunuz. "İşaretleyiciler" veya özel regex gibi herhangi bir özel karakter eklemeden {{{. Bir bölge seçip, yapıyla uğraşmadan katlamak istiyorum.

Etrafa bakarken, Emacs'ta kod katlama ile ilgili sorular zaten varmış gibi görünüyor. Birisi "mükemmel bir çözüm" olmadığını söyledi. Örneğin, Vim'de basit kodlamanın bir klibini oluşturdum:

Vim düz katlanır

görüntü tanımını buraya girin

+ Oldukça basit, bir bölge seçin ve katlayın.
+ Israrcı. Tamponu öldürdüğünüzde / kapattığınızda Vim. Ve dosyayı yeniden açın, kıvrımlar hala orada.
+ Neyin katlandığını kolayca görmek için vurgu çubuğunu alırsınız.

Vim için başka birçok katlama konfigürasyonu var. Emacs ile mutluyum, ama bu özlediğim bir şey. Denediğim diğer alternatifler, örneğin HideShow:

GizleGöster

görüntü tanımını buraya girin

Şeytanın alternatifi hide-show minor mode. Kullanılamaz buldum:

- Bir bölge seçip katlayamıyorum. Kod bloklarına katlanır.

- Katlanmış bir bariyer ya da başka bir şey yok. Kolayca özleyebilirsin.

- Kalıcı değil. Dosyayı yeniden açarsanız, kıvrımlar kaybolur.

Başka bir paket daha var, bunu katlayın :

Bunu katla

görüntü tanımını buraya girin

- Güzel bir alternatif. Ancak, girintiyle karışır, çünkü katlamanın altındaki metin katlamanın yanına yerleştirilir ... (?).

- Sadece bölgeyi görsel olarak seçip katlayabiliyor. Ancak girintiyi kırar, böylece genel bakış bozulur. Çok kullanışlı değil.

- Katlanmış bir bariyer ya da başka bir şey yok. Kolayca özleyebilirsin.

Sorun ne

Vim'in katlama şeklini çoğaltmak istiyorum. Ancak etrafı araştırdığımda, bunu Emacs'ta yapmak çok zor görünüyor. Öyleyse merak ediyorum emacs veya mimarisinde bunu çoğaltmayı zorlaştıran bir şey var mı? Limitler nedir?


2
Sorunun çok geniş olduğunu hissettim, bu yüzden kapatmak için oy kullandım. Orijinal posterin, aranan özelliklerin bazılarını sağlayan birkaç kitaplık seçmesini ve ardından bunları istediğiniz şekilde bir araya getirmesini / değiştirmesini tavsiye ederim. OP, belirli bir özelliği uygulama / değiştirme konusunda sorun yaşarsa , o konuda sınırlı bir soru gönderin. OP muhtemelen istenen görsel efektleri başarabilir, ancak zaman içinde çalışılması için devam eden bir proje yapmak için hazırlanmalıdır.
kanun listesi

3
Hangi katlama özelliklerini istediğinizi açıklayabilir misiniz? Kural olarak, bu sitedeki kişilerin Vim kod katlamanın nasıl çalıştığını bilmesini bekleyemezsiniz ve yine de bize hangi özellikleri özellikle istediğinizi söylemelisiniz. İstediğiniz şey hakkında sağladığınız tek bilgi, yalnızca bir örnek gösteren bir animasyondur ve yine de ne gösterdiği hakkında hiçbir fikrim yok: ne kullandığınızı, imleci neden bu noktaya veya o noktaya getirdiğinizi vb. Ayrıca, tipik bir tarayıcıda bir döngüde oynarlar ve tekrarlamanın ne zaman başladığını söylemek mümkün değildir.
Gilles 'SO- kötülük olmayı'

3
Bekletme bu sorudan çıkarılmalıdır. şu anda durduğundan dolayı oldukça belirgindir. soruyu cevaplamamak, kapatmak için iyi bir neden değil.
Ista

2
ar-hide-bölge-atpt, ar-show-bölge-atpt 'nokta-nokta-utils.el' den, github.com/andreas-roehler/thing-at-point-utils - lütfen engellemeyi kaldırın düzenli bir cevap olabilir.
Andreas Röhler

1
Anladığım kadarıyla asıl soru şu: Temelde: “ Birisi: Lütfen Emacs için Vim'de bulunan kod katlama özelliklerini sağlayacak bir kitaplığın tamamını yazın. ” Bazı yorumlardan ve oyların yeterli olduğunu görüyorum . bunu görmek isteyen insanlar gerçek oluyor. Bununla birlikte, bunun makul bir şekilde cevaba nasıl sığabileceğini anlamıyorum - önerilen yeni kütüphanenin, sorunlar ve hata düzeltmeleri ile devam etmesi gerekecektir. Ben de kod katlama için harika yeni özelliklere sahip bir kütüphanenin tamamını birilerinin yazmasına aldırmam.
kanun listesi

Yanıtlar:


16

Dene vimish-fold.

Özellikler

  • dahil olan piller: küçük modu etkinleştirmek, birkaç komutu bağlamak ve her şey sadece işe yarayacak;

  • seçtiğiniz bölgelerde çalışır;

  • kalıcı: dosyayı kapattığınızda kıvrımlarınız kaybolmuyor;

  • Kalıcı olmasının yanı sıra, iyi ölçeklenir, olumsuz etkileri olmadan yüzlerce dosya üzerinde katlanabilir;

  • metnin hangi bölümlerinin katlandığı açıktır;

  • girinti veya başka bir şeyi bozmaz;

  • sadece katlanmamış kıvrımları (oh, my) yeniden katlayabilir;

  • avyPaketin hayranları için : avymetni en az sayıda tuş darbesiyle katlamak için kullanabilirsiniz !

kullanım

Bu işlevlerin bazıları / tümü için bağlayıcı oluşturun:

  • vimish-fold - seçilen bölgenin temel katlanması;

  • vimish-fold-unfold- Bunu gerçekten bağlamanıza gerek yok, sadece C-gkatlanmış metni temsil eden başlığa nokta yerleştirildiğinde kullanın ;

  • vimish-fold-unfold-all - yine de bu yararlı olabilir;

  • vimish-fold-refold - evet, geri katlayabilirsiniz;

  • vimish-fold-avy- avymetninizi katlamak için kullanın !

vimish-fold-modeSürekli olarak katlanmasını istediğiniz modlar için seçici olarak dönebilir veya her yerde etkinleştirebilirsiniz:

(vimish-fold-global-mode 1)

Önerilen herhangi bir kilitleme bağınız var mı? C ++ modundayken hangi bağlayıcıları kullanıyorsunuz? C modu? Python modu? Lisp modu? ELSP modu? JavaScript modu?
Reb.Cabin

1
@ Reb.Cabin, bu moda özgü bir paket değildir, bu nedenle global anahtar bağlamaları en iyi seçimdir. Anahtar akorları içermeyen anahtar bağları kullanıyorum ve çoğu insan bunları biraz garip görüyor, şu anda elimde: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. Anahtar kelimelerimin çoğu böyle, bu benim yapılandırmam .
Mark Karpov

Bu şeytani hareketler ve tekli nesnelerle bütünleşiyor mu?
PythonNut

1
Hm ... PR ile çalışmaya başlayacağım.
PythonNut

1
Ben, biri için, tamamen kullanılamaz bir vimish-fold buluyorum. Belki de zaten vim'deki kod katlamaya aşina olanlar için sezgiseldir ... Bilmiyorum. Ayrıca, org modunda katlamanın neden bu kadar iyi çalıştığını anlamıyorum, ancak
Emacs'ın
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.