Vim'de metni belirli bir uzunluğa nasıl kaydırabilirim?


102

Göreceli ölçülerden bahsedelim. Vim'im şöyle görünüyor:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

Daha küçük olmasını isterim:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

Onu nasıl alabilirim? Ve böyle bir bloğun uzunluğunu ayarlamayı nasıl yönetebilirim?


Metnin girintisini artırmak değil, metni kaydırmak mı istiyorsunuz?
lc.

lc: Farkı bilmiyorum. Bana tavsiye edildiği gibi paket yazacaktım ama hiç çalışmadım.
Léo Léopold Hertz 준영

Yanıtlar:


177

Aslında iki şey yapabilirsiniz:

  1. Satır sonu ekleyerek metninizi daha kısa satırlara sahip olacak şekilde biçimlendirelim (değiştirin)
  2. Oldukları gibi çizgileri bırakın, ancak gösterilecek onları sarılmış

Hangisini istersin?

Seçenek 1 ayarlayarak elde edilebilir textwidth(örneğin :set textwidth=30(Swaarop'un cevabından)). Ardından, metninizi vurgulayarak (görsel modda) ve yazarak yeniden biçimlendirebilirsiniz gq. ( textwidthKısaltırsak twböylece :set tw=30).

Seçenek 2, :set wrap/ çalıştırılarak değiştirilebilir :set nowrap. Bu, pencere için çok uzun olan satırları kaydıracaktır.

Her ikisi de bağımsızdır.


33
Görsel moddan gq tuşu komutu için +1, bu oldukça kullanışlı
Fire Crow

3
Bilginize, bu boşluklarda kırılır ve gqgq, tw = 5 olsa bile soruda gösterildiği gibi bir satıra hiçbir şey yapmaz.
dlamblin

2
@Dlamblin: Doğru. foldBeyaz boşluğa saygı göstermeden tam olarak verilen genişlikte katlamak istiyorsanız, o zaman komutu fgm'nin cevabında olduğu gibi kullanın .
sleske

Senin seçeneğin gördüğüm kadarıyla işe yaramıyor. wrappencere sınırında değil de sarılır textwidth.
DerWeh

@DerWeh: Evet, pencere sınırına sarılır. Açıklığa kavuşturmak için düzenledim.
sleske

60

'Metin genişliğini' ayarladıktan sonra, görsel modlu bir metin seçebilir ve güzelce sarmak için gq tuşuna basabilirsiniz (ayrıca bazı eski / eski yapılandırmalarda Q da kullanabilirsiniz).

Birkaç faydalı ipucu:

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq

3
+1, vim'deyken yanlışlıkla gq'ye bastım, son yarım saati neye çarptığımı görmeye çalışarak geçirdim. Bu çok kullanışlı.
user176121

gqqayrıca geçerli satırı kaydırır ( gqgqveya yerine gq$).
Ash

21

Katlama (1) kullanmak bir olasılıktır:

:%!fold -w5 

Sonuç:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

1
Bu aynı zamanda katlanma alanlarına da saygı göstermiyor
Lionel

7
@Lionel: Evet. Boşluklara saygı göstermek için, katlama komutuna "-s" seçeneğini ekleyin.
sleske

14
:set textwidth=30

Orijinal posterin örneğindeki gibi, boşluk olmadığında metin genişliği bunu nasıl ele alıyor? Bir oyun oynadım ve yalnızca boşluklar varsa (veya eğer breakat değişkeni başka bir şeye ayarlanmışsa) metin genişliğine göre biçimlendiriyor gibi görünüyor.
Andy

3
@Andy textwidthboşluksuz bir durumu işlemez. Bunu formatexpryapmak için kendi işlevinizi yazabilirsiniz .
Swaroop CH

8

Belli bir uzunlukta ayırmak istediğiniz boşluksuz bir metniniz varsa, ne harici kullanmak foldne de kendinizinkini yazmak gerekli değildir formatexpr.

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

tüm satırları 80 karakterde kıracak.


2
Bu, bir OpenSSL sertifikasını yeniden canlandırırken günümü kurtardı. Teşekkürler
Cengiz Can
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.