Vim'deki en uzun satırın uzunluğunu belirlemek için bir komut var mı? Ve bu uzunluğu dosyanın başında eklemek için?Vim en uzun çizgi?
cevap
Gnu's wc komutunun, dosyanın maksimum satır uzunluğunu basan bir -L --max satır uzunluğu seçeneği vardır. gnu man wc'a bakın. Freebsd wc'de de -L var, ama --max-line-length var, bkz. freebsd man wc.
Bunları vim'den nasıl kullanabilirim? Komut dosyası: Açık dosyayı wc-L üzerinden filtreleyecek ve dosyanın içeriğini maksimum satır uzunluğuna getirecektir. Find length of longest line - awk bash en uzun hat uzunluğunu bulmak için awk nasıl kullanılacağı açıklanır,
:%yank
:%!wc -L
:put
yerine wc kullanmanın:
yapmak dosya içeriğini korumak ve ilk satırda maksimum hat uzunluğu koymak için.Tamam, şimdi saf bir Vim çözümü için. Ben yazı yazmak için biraz yeni, ama işte burada. Aşağıdakiler, textfilter'dan FilterLongestLineLength işlevine dayanmaktadır.
function! PrependLongestLineLength ()
let maxlength = 0
let linenumber = 1
while linenumber <= line("$")
exe ":".linenumber
let linelength = virtcol("$")
if maxlength < linelength
let maxlength = linelength
endif
let linenumber = linenumber+1
endwhile
exe ':0'
exe 'normal O'
exe 'normal 0C'.maxlength
endfunction
command PrependLongestLineLength call PrependLongestLineLength()
Bu kodu .vim dosyasına (veya .vimrc) koyun ve: dosyayı gönderin. Daha sonra yeni komutu kullanın:
Teşekkürler, bunu anlamak çok eğlenceliydi. Basit
:0put=max(map(getline(1,'$'), 'len(v:val)'))
Ben gibi bir şey vardı! Awk '{print (length ($ 0))}'
Jonathan (pre-vim-7) çözümü biraz karmaşık olsa bile, “virtcol()” ifadesinin kullanılması doğrudur, tablolamalar '1' olarak sayılmayacaktır. Korkarım ki, wc, awk, perl, vb. Tüm diğer çözümler doğru cevap vermeyecektir. –
genişletilmiş tabulasyonların çalışıyorsanız, yeterlidir.
Aksi takdirde, ben (eğer :h virtcol()
son örneği olarak bulabiliriz, eksi -1) Aşağıdaki gerekecektir tahmin:
0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))
Bu satıra "basit" demezdim. Olsa da çalışır, bu yüzden hiçbir şikayetleri. – sleske
: wc -L%
yerine
:%! wc -L
Dosyanın başına bu uzunluğu eklemek için:
: 0r! wc -L% | cut -d '' -f1
"%! Wc -L" nin avantajı, kaydedilmemiş veya adlandırılmamış arabelleklerde çalışmasıdır. – wchargin
Bu Vim'de yapılmalı mı? Bunu sormak istiyorum çünkü bu yapmak için oldukça özel bir şey ve birden fazla dosya üzerinde ihtiyacınız varsa bunu yapmak için bir Python/Perl/Ruby komut dosyası koymak için muhtemelen daha hızlı olacaktır. – ZoogieZork
Bu, asıl soruna yanlış çözümü sormanız gibi geliyor. Tam olarak ne elde etmeye çalışıyorsun? – soulmerge
@ZoogieZork: Bazen vim yeterlidir ve yeterince basittir, harici alet kullanmaya gerek yoktur. –