vim komutu metni 80 sütuna yeniden yapılandırma / zorlama


240

set textwidth( Vim 80 sütun düzeni endişeleri gibi ) kullanarak vim metin genişliğini otomatik olarak ayarlamak için yollar olduğunu biliyorum . Ne arıyorum =(80 satırına sarmak için (girintili satır komutu) benzer bir şeydir . Kullanım örneği bazen metin genişliği ile metin düzenlemek ve satırları birleştirdikten veya metin sildikten / kötü ekledikten sonra çıkıyor.

İdeal olarak, bu komut seçtiğim çizgileri tamamen yeniden düzenler ve kısa çizgilere eklerken uzun çizgileri keser. Bir örnek:

long line is long!  
short

Komutu çalıştırdıktan sonra (sargının 13 sütun olduğu varsayılarak):

long line is  
long! short

Bu gerçek bir vim komutuyla mümkün değilse, belki de girdiyi yönlendirebileceğim bir komut satırı programı var mı?

Aramadan sonra daha fazla seçeneğe sahip bu referansı buldum: http://www.cs.swarthmore.edu/help/vim/reformatting.html


9
Vim'in metin biçimlendirmesini par gibi harici bir programa devredebileceğini öğrenmek de ilginizi çekebilir . Par ile nasıl biçimlendirileceğini gösteren bir ekran oluşturdum .
nelstrom

@nelstrom teşekkürler, TIL hakkında par. O fantastik!
Steven Lu

2
Metnin ince görünmesini ve kırpılmasını istiyorsanız (iyi kesilmiş mi?), Daima düşünün gq- Gentleman's Quarterly . (Antropomorfize erkek için özür dilerim, ama anımsatıcı çalışır.)
16'da

Yanıtlar:


372

textwidth80 ( :set textwidth=80) olarak ayarlayın , dosyanın başına gidin ( Ctrl- Homeveya ile yapılabilir gg) ve yazın gqG.

gqGmetni geçerli konumdan başlayıp dosyanın sonuna kadar biçimlendirir. Mümkün olduğunda otomatik olarak ardışık satırlara katılır. Bu ikisinin birleştirilmesini istemiyorsanız, iki satır arasına boş bir satır yerleştirebilirsiniz.


14
Ayrıca görsel seçimlerle de çalışır. Yani şöyle bir şey V}gq. Bu şekilde, gerçekten biçimlendirmeden önce neyi biçimlendireceğinizi görürsünüz.
Plouff

6
Bu arada, qkendi başına tam olarak ne yapar ?
Richard-Degenne

1
Bunu boşluk olmayan, sadece bir karakter uzunluğunda olan satırlarla yapmanın bir yolu var mı? EDIT: "fold" yardımcı programı keşfettim. Hala vi bunu merak ediyorum.
Donald Smith

7
zaman kazanmak set tw=80yerine kullanmakset textwidth=80
Yibo Yang

4
@dmranck Sonra set textwidth=76satırlarınız yazarken otomatik olarak sarılır. Benim şikayetim, mevcut satırların düzenlenmesi için hiçbir şey yapmamasıdır. Ancak V}gqbu konuda son derece yararlıdır. Vgörsel seçim moduna girer }, bir sonraki paragraf sonunu seçer ve gqüzerinde geçerli biçimlendiriciyi yürütür (veya gwvi biçimlendiricisini açıkça çağırmak için kullanın ). Ayrıca, {yukarı doğru seçer. ggVGgqBelki de daha kolay bir yol olsa da , belgenin tamamını ve biçimini seçebilirsiniz . @Bunu kolaylaştırmak için bunu bir makro olarak kaydedin . vipgqGeçerli paragrafı oluşturmak için kullanın .
ktbiz

94

Michael'ın çözümü anahtardır, ancak çoğu zaman mevcut paragrafın geri kalanını yeniden biçimlendirmek istediğimi düşünüyorum; bu davranış için şunu kullanın:gq} .


17
bunu genişleterek - istediğinizi biçimlendirmek için gq <motion> kullanabilirsiniz.
Dan Schnau

1
Ayrıca, satırların bir cümle sınırına katıldığı dönemlerden sonra iki boşluğun görünmesini engelleyen 'boşluklar' seçeneği. Tipografik stiliniz İngilizce cümleler arasında tek boşluk olduğunda iyidir.
Alex Hirzel

36

Kullanabilirsiniz gqHerhangi bir hareket operatörüyle . Örneğin, yalnızca geçerli satırın sonuna yeniden biçimlendirmek istiyorsanız (örn. İmlecinizin açık olduğu satırı sarmak için)gq$

Görsel modda metin seçerek (`v ve hareketli) ve sonra gq yazarak da yeniden biçimlendirebilirsiniz.

Çizgileri sarmaya zorlamak için başka seçenekler de vardır.

Vim'in, metni yeniden yapılandırmak için sonuna kadar beklemek yerine satırlara metin eklerken satırlarınızı sarmasını istiyorsanız, aşağıdaki seçenekleri yararlı bulacaksınız:

:set textwidth=80
:set wrapmargin=2

(Yan izlenen tarafından anlamayın wrapve linebreakmetin ekranda sadece reformasyon hangi ve tampon metni değişmez)


9
Gönderen wrapmarginyardımı: 'textwidth' olduğunda bu seçenek kullanılmaz olmayan sıfır.
mmoya

21

DonaldSmith'ten gelen bir yorum sayesinde, textwidthseçeneği uzun metin satırımı yeniden biçimlendirmediği için buldum (onaltılık bayt dönüşümleriyle oynatmayı dönüştürüyordum):

:%!fold -w 60

Bu, tüm dosyayı (benim için bir satır olan) 60 uzunluktaki satırlara dönüştürdü.


1
Bu çok güzel. Tüm yanıtlar, bir çizgi boşlukları kelimelere böldüğünde bir çizginin genişliğini sınırlamaya odaklanır. Bu çözüm çok uzun kelimeler (DNA dizileri) için çalışır.
pedrosaurio

1
Uzun URL'ler için bu işe yaradığını bulduğum tek şeyle ilgili. Ben zaten
metin genişliği

13

Eğer bir Vim olmayan yol , her zaman fmt ve par UNIX komutları vardır .

Notlar:

  • Unicode hakkında yorum yapamam, farklı davranabilir veya etmeyebilir.
  • @nelstrom parweb yayınında zaten bahsetti .

Her ikisini de örneğiniz için nasıl kullanacağımız aşağıda açıklanmıştır.

$ echo -e 'long line is long!\nshort' > 3033423.txt
$ cat 3033423.txt
long line is long!
short
$ fmt -w 13 3033423.txt
long line is
long!  short
$ par 13gr 3033423.txt
long line is
long! short

Vim'in içinden kullanmak için:

:%! fmt -w 13
:%! par 13gr

Ayrıca :formatprgpar veya fmt ve geçersiz kılmayı da ayarlayabilirsiniz gq. Daha fazla bilgi için :help formatprgVim'i arayın .


9

Hemen hemen her zaman gqgörsel modda kullanıyorum. Öğrencilerime titiz insanlar için bir dergi olan "Gentlemens 'Quarterly" anlamına geldiğini söylüyorum.

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.