VIM'de gerçekten çok uzun bir satırı birden çok satıra nasıl bölerim?


170

VIM editöründe süper uzun bir satırım olduğunu varsayalım (yaklaşık 300+ karakter söyleyin). Bunu nasıl birden fazla satıra bölerim ki kelime sınırları kabaca 80 karaktere düşebilir?

Misal:

This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line

için

This is a really long line 
This is a really long line
This is a really long line
This is a really long line
This is a really long line
This is a ...

Yanıtlar:


254

Vim bunu çok kolay yapıyor (kelime sınırlarında kesişme çizgileri).

gq{motion} % format the line that {motion} moves over
{Visual}gq % format the visually selected area
gqq        % format the current line
...

Kontrol etmenizi öneririm :help gqve :help gw.

Ayrıca textwidth ( tw) öğesinin ayarlanması , yazma sırasında aşıldığında otomatik satır sonu verir. gqDevre dışı bırakılırsa gqpencere boyutu veya hangisinin önce geldiğine bağlı olarak 79 kırılırsa da kullanılır .

:set tw=80

Metin genişliği vim içerecek format seçeneklerini ayarlayarak, tw ayarında otomatik olarak kırılır.

:set fo+=t

5
Durumunuz için, gqkomut <ESC>(Ekle / Değiştir / vb. Modundan çık), sonragq80l
MidnightLightning

6
Bu, Ctrl + j'nin tam tersidir (birden çok satırı bir araya getirir).
Yzmir Ramirez

9
Vim beni şaşırtmaktan asla vazgeçmez. Bu saf altın.
Jondlm

10
sadece bunu bulan bir sonraki kişi için, gq sadece bir katı metin satırını bölmeyecek, işini yapmak için boşluk gerektiriyor
stringy05

2
[ishal gqq] aaaahhh, bu kadar güzel
underscore_d

85

Önce vim'inizi 80 karakter istediğinizi anlayacak şekilde ayarlayın:

:set tw=80

sonra çizgiyi doldurun:

V

ve onu yeniden biçimlendirin:

gq

17

Bu gerçekten VIM ile ilgili değil, ancak fmt programını

$ fmt myfile

38
:%! fmt% "Vim ile ilgili olabilir :)
Maxim Sloyko

2
Vi için kullanışlıdır, ama vim'de gqq'yi tercih ederim.
WhyNotHugo

13

Düz metin satırları için, v'yi normal modda kullanarak alanı vurgulayın, ardından düğmesine basın.

:s/\v(.{80})/\1\r/g

Bu, her 80'inci karakterin sonuna yeni bir satır ekleyecektir.

:s/       replaces within the current select
\v        uses regular expressions
(.{80})   selects 80 characters & placed them into group one
\1\r      replaces group one with group one and a newline

Uzun bir base64 dizesi için çalışan tek çözüm budur.
jviotti

6

* Nix kullanıyorsanız muhtemelen foldmüsait olabilirsiniz.

Kullanmak istediğiniz bölgeyi seçin v, ardından 80 genişliğindeki boşlukları kullanarak şunları kırabilirsiniz:

!fold --spaces --width=80

Bu esasında kullanmakla aynıdır gq.

Ancak, sadece 80 karakterini kırmak ve boşluklarla sınırlı kalmamak istiyorsanız şunları kullanabilirsiniz:

!fold --width=80

Bir tuşa basarak isterseniz sadece bir eşleme ayarlayın - kullandım

vmap <f1> !fold --width=80<CR>


Boşluk ile ayrılmış olmayan uzun dizgiler için çalışan cevap budur. MacOS'ta, katlama yerine gfold kullanmanız gerekebilir.
Aaron D

mac os, yapmak zorunda kaldım! fold -w 80
user674669

5

Mevcut satır sonlarını kaldırmadan belgenin tamamındaki uzun satırları bölmek için şunu kullanın:

:set formatoptions+=w
:set tw=80
gggqG

4

Bir satır yerine tüm dosyayı yeniden biçimlendirmem gerekiyordu. Wernsey'in işaret ettiği gibi, 'fmt' kullanabilirdim, ancak aşağıdaki vim dizisi de hile yaptı (burada çeşitli cevaplardan ödünç alındı):

<ESC>
:setl tw=80 fo=t
1GVGgq

3

Hızlı ve kötü bir şekilde, belki de aşağıdaki haritayı deneyin:

map q 080lwbels<CR><ESC>

diyor ki:

  • çizginin 0. konumunu başlat,
  • sağdaki 80. karaktere git,
  • sonraki kelimenin başına git,
  • önceki kelimeye geri dön,
  • mevcut kelimenin sonuna git,
  • bir karakter sağa git ve
  • bu karakter için bir CR kullanın.

Daha sonra q ve CR'ye basmak, çizgiyi sözcük sınırındaki parçalara ayırır.


-1

Son boşluktan sonra ancak 80 sütunundan önce her LONGLINE'a manuel olarak '\' (ve sonra biçimlendirmek için CR / sekmesi) ekledim. Demek ki:

1 this is a long, long, line

şimdi benziyor

1 this is a long, \
        long line

ve normal olarak derler.

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.