Vim'deki paragraflar içindeki satırları birleştir


13

Varsayalım ki otomatik satır kesilmesiyle uzun bir belge vim yazdınız, bu nedenle tüm satırlar örneğin 79 karakterde kesilmiştir. Bu uzunluktaki tüm satırları kırmak için tüm belgeye biçimlendirme uygulamış olabilirsiniz.

Paragraflar belgenizde boş satırlarla çizilir.

Artık paragrafların içinde satır sonları istemediğinize karar veriyorsunuz.

Paragraf sınırlarını tamamen ortadan kaldırmadan paragraflardaki tüm satır sonlarını nasıl kaldırabilirsiniz?

Bu hızlı ve aptalca kesmek yaptım, ama doğru yolu arıyorum.

:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ           - join all lines in the file
:%s/@@@@@/\r\r/g   - replace @@@@@ with line breaks

hey, çözümünüz işe yarıyorsa ve çözümünüz işe yarıyorsa vurmayın.
pdwalker

Yanıtlar:


12

Sanırım bu istediğinizi yapar: dosyanın sonunda boş bir satır olduğundan emin olun, sonra her paragrafa katılın (boş bir satırla sonlandırılır).

G:a

.
:g/^./ .,/^$/-1 join

Açıklama: önce dosyanın sonuna gidin ve ile fazladan boş bir satır ekleyin :a(belki de bunu yapmanın daha zarif bir yolu vardır; etkileşimli olarak, ilk üç satırı değiştirebilirsiniz o<ESC>). Daha sonra, henüz dikkate alınmamış boş olmayan her satır için ( :g/^./), joinkomutu seçili satırdan ( .) başlayıp bir sonraki boş satırdan ( /^$/-1) önce bir satır biten aralığa uygulayın .

İsteğe bağlı olarak, :g/^$/dboş bir satırın kalmasını istemiyorsanız (o zaman çıkarabilirsiniz -1).


Teşekkürler. Bu benim için çok yaklaşıyor, ancak paragraflar arasındaki boş satırları siliyor. (Windows bir şey olup olmadığını görmek için fileformat unix ve dos denedim). Ayrıca, komutları biraz çevirebilir misiniz? G son satıra gider. : bir yardım göre "append" olduğunu ama bunun ne olduğundan emin değilim. Ayrıca sahip olduğunuz g / pattern / cmd beni kaybetti. Komut nedir?
dggoldst

@dggoldst: Boş satırları tutma komutunu değiştirdim. İlk üç satır yalnızca dosyanın sonuna boş bir satır eklemektir (aksi takdirde son paragraf eşleşmez). Son komut, :geşleşen tüm satırlara bir komut uygular; bkz :help :gve belki nasıl Konuyu :gboğulan bir sen silme satır sonları .
Gilles 'SO- kötü olmayı kes

:$pu _ Sonunda, sonunda boş bir çizgi ile sonuçlanan bir kara delik yazmacı koyun.
SergioAraujo

12

Bunu yapmalı:

:set tw=99999
gggqG

twen az paragraftaki karakter sayısı kadar büyük bir değere ayarlanır. ggimleci ilk satıra taşır; gqyeniden biçimlendirme emridir; Gimleci son satıra gqtaşıyarak geçerli imleç konumundan son satıra yeniden biçimlendirmeyi söyler .


5
  1. İmleci istenen paragrafın içine getir

  2. Tür: vipJ

( vipgeçerli paragrafı vurgular, Jtüm satırları birleştirir)


2

Bunu yapmanın en temiz yolu olmayabilir, ama kullanacağım şey şu:

ggqav}bgJ}wq999@a   # go to the top of the file (gg)
                    # start recording macro "a" (qa)
                    # select the entire paragraph (v})
                    # go back one word so as not to join the blank line (b)
                    # join the selected lines without spaces (gJ)
                    # go to first word of the next paragraph (}w)
                    # finish recording the macro (q)
                    # 999 times (arbitrary number of paragraphs to join)
                    # run macro "a" (@a)

( VIM 7.2'de çalışır. )

Orijinal olarak biçimlendirildiklerinde paragrafların tam olarak nasıl bölündüğüne bağlı olarak, gJkomutu (boşluk olmadan birleştir) Jkomutuyla (boşluklarla birleştir ) değiştirmek isteyebilirsiniz .

Rasgele 999sayımın yalnızca en az dosyadaki paragraf sayısı olması gerekir - işlemci döngülerinden başka bir şey istemiyorsanız ve kaybetmeniz durumunda daha büyük bir sayı seçebilirsiniz. Paragraflar arasında bir ve yalnızca bir boş satır varsayarsak, aşağıdakileri kullanarak daha doğru bir paragraf sayısı elde edebilirsiniz:

:%s/^$//gn     # returns "999 matches on 999 lines"

Bu benim için çalışıyor. İmleci dosyanın en üstüne koymak için başında bir "gg" eklemek iyi olur. Ayrıca, gJ yerine J kullanılması, ayrı kelimelerin bir araya getirilmesine neden olmaz. Bu sadece şu anda beni şaşırtan "formatoptions" değerlerim için geçerli olabilir.
dggoldst
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.