2013-07-25 18 views
5

bir dosya olduğunu varsayalım (yeni satırlar^n olarak işaretli):Vim'deki metin bloğu için boşluk nasıl normal hale getirilir?

aaaa^n 
         bbbb^n 
cccc^n 

blok (muhtemelen görsel seçimi kullanarak) en sağ kısmına boşluk dolgu için basit bir komut var; Aşağıda gibi, sık sık lider boşluk kaldırma hakkında sorular görüyorum, ama bu durumda ben blokta en uzun boşluk olmayan karakterine normlu boşluk açan istediğiniz:

aaaa      ^n 
         bbbb^n 
cccc      ^n 
+1

İlginç, biraz ilgili bir sorun (ve cevap) [Vim eşleşme çizgisinin uzunluğu olsun] (http://stackoverflow.com/q/13324093). – glts

+1

Ayrıca soruma bakın: http://stackoverflow.com/questions/10057562/create-virtualedit-block-around-selection – Reman

+0

[tabular plugin] 'i (https://github.com/godlygeek/tabular) edinin. –

cevap

4

probaly kolay yolu yapmak olacaktır

set virtualedit=all 

Seçmek istediğiniz bloğun sol üst kısmına gidin. Blockwise görsel seçim (<C-V>) kullanın ve istediğiniz çizgileri seçin. Sonra görsel bloğu çizginin sonuna uzatmak için $'a basın.

Sonra Sonra geri o kendini üzerine çizgiler çekti neyi geçmiş için gvp yazın y

ile seçim yank. (gv, son görsel bloğu yeniden seçer). İşiniz bittiğinde bu en uzun hat + 1

bu işleri nedeni uzunluğu olmak tüm satırları uzatacaktır. Bir sanal düzenleme kullandığınızda, görsel seçim her satırı, kayıt defterine yerleştirirken en uzuna kadar uzatır. Biraz yer almak her ne kadar

Bu, :%s/ $//

+1

+1 mükemmel kullanım ''virtualedit = all''. Bunun, her satırın sonunda ekstra bir alan eklemesi dışında harika çalıştığını gördüm. '% S /.$//' ile kolayca sabitlenir. –

+0

@PeterRincker Evet, ben de fark ettim ve ondan kurtulmak için bir ayar arıyordum. – FDinoff

+0

Sanırım bunun nedeni, "$" nin nasıl çalıştığıdır. Her zaman çizginin son karakterinden bir yere gider. Ben görsel blok modu için bir g_ 'diliyorum. –

3

Tek :substitute bunu yapabilir ile kolayca tamir edilebilir sonuna fazladan bir boşluk ekleyecektir:

:'<,'>s/$/\=repeat(' ', max(map(getline(line("'<"),line("'>")),'strdisplaywidth(v:val)'))-strdisplaywidth(getline('.')))/ 

Bu komut Görsel seçim için geçerlidir. Aralık boyunca daha fazla kontrole ihtiyacınız varsa, yedeklemeyi range kabul eden bir işlevde sarmayı düşünün.

Nasıl çalışır? :h sub-replace-expression bkz: yedek dizede

  • \= bir ifade değerlendirmenize olanak tanır.

  • yedek dolgu alanı karakterlerin bir sayıdır: repeat(' ', ...). boşluk karakterleri

  • tam sayı

    • seçimi, max(map(getline(start,end), 'strdisplaywidth(v:val)')) maksimum satır uzunluğu ve
    • akım hattı, strdisplaywidth(getline('.')) genişliği arasındaki fark olarak belirlenmiştir.

Not bu strdisplaywidth() eski virüsünün mevcut değildir, ancak doğru doğrultusunda her iki tırnağa ve boşluk işlemek gereklidir. (Ucuz bir yedek olarak strlen() kullanın.

+0

Bu en iyi çözüm değil, bence, ama bu komut tarafından biraz eğlendim. Bir kez iş için – ravron

+1

, bu biraz fazla. Ancak, bu işlemin çok sık yapılması gerekiyorsa, bu tür bir işlemi çok kolay hale getirmek için bir işlev veya haritalama olarak yazılabilir. Sadece görsel seçin, sonra 'ABC' +1'e basın! – Kent

+0

@Kent glts bir işlev ve eşleme yazdı ama sonra onu kaldırdı. Görmek isterseniz düzenleme geçmişini kontrol edin. – FDinoff

İlgili konular