Geçerli dosyanın karakter sayısını görüntülemek için (g) Vim'i nasıl alabilirim?


85

Sık kullandığım bir programlama forumu için dersler ve makaleler yazmaktan hoşlanıyorum. Bu forumun yazı başına karakter sınırı var. Geçmişte not defteri yazmak için Notepad ++ kullandım ve durum çubuğunda canlı bir karakter sayımı tutar. GVim'i daha fazla kullanmaya başlıyorum ve bu noktada gerçekten Notepad ++ 'a geri dönmek istemiyorum, ancak bu karakter sayısının olması çok yararlı. Sayımı geçersem, genellikle notu Notepad ++ 'a yapıştırarak bitiririm, böylece limiti aşacak kadar kestiğimi görebilirim.

Yardımcı :set rulerolacak öneriler gördüm , ancak bu sadece karakterleri geçerli satırdaki geçerli sütun dizini üzerinden verir. Paragraf sonları kullanmasaydım bu harika olurdu, ancak bir paragrafta birkaç bin karakter okumanın rahat olmadığını kabul edeceğinize eminim.

Yardımı okudum ve rulerformatişe yarayacağını düşündüm , fakat statuslinekullandığı formata baktıktan sonra mevcut tampon için bir karakter sayısı veren hiçbir şey görmedim.

Bunu ekleyen eklentiler olduğunu gördüm, ancak hala parmaklarımı gVim'e batırıyorum ve ne yaptıklarını anlamadan önce rastgele eklentiler yüklemek istediğimden emin değilim. Vim için yerleşik bir şey kullanmayı tercih ederdim, ama yoksa, mevcut değil.

Hedefime ulaşmak için ne yapmalıyım? Bir eklenti içeriyorsa, kullanıyor musunuz ve ne kadar iyi çalışıyor?

Yanıtlar:


140

g CTRL-Gİmleç ve dosyadaki bazı istatistikleri görüntülemek için normal modda basın .

Linux'taysanız wc -m, geçerli dosyadaki karakter sayısını almak için kullanabilirsiniz .

:!wc -m %

Gerçek zamanlı olarak güncellenmediğinden, bu komutu aşağıdaki gibi bir şeye eşlemek isteyebilirsiniz:

map <F4> :!wc -m %<CR>

19
g CTRL-GBunun var olduğunu bilmiyordum. Güzel!
Jason Down

Nice Vim
Eddie B

3
g <cg> güzel platformlar arası çalışır.
AndrewPK

Kullanımı hakkında daha fazla bilgiyi nerede bulabilirim ! [...] %?
Wok

Yardım burada: vimdoc.sourceforge.net/htmldoc/various.html#:!cmd . Kabuk komutlarını yoğun kullanırsanız, şu eklentiyi de kontrol edin: stevelosh.com/projects/clam .
mrucci

24
:help count-items

ala, kuru ala bir kuru işlem yapabileceğini gösterir

:%s/./&/gn

(daha sonra eşleşen karakter sayısını geri bildirir) veya strlen()görsel olarak seçilen metinde hoşunuza giden bir şey :

:echo strlen(@")

("adsız sicildir)

Durum satırınızdaki bir ifadeyi çağırabildiğiniz için %{myfunc()}iyi bir başlangıç ​​noktası olabilir. tüm metni seçmek ve sonra onu seçmek zorunda kalacağınız için zaman ayırmak biraz zaman alabilir, ancak belki de "-reister'daki bayt sayısını göstermeniz zaten mümkün. Eğer gerçekten sayıyı bilmek istiyorsanız tampondaki karakterlerin listesi: sadece görsel olarak tampondaki TÜM metni seçin ve kopyalayın.

 :set statusline=%{strlen(@")}

Bu, "-reger'daki karakter sayısını verir (bu, mevcut tamponu seçip yank yaparsanız bayt sayısıyla aynıdır).


Çözüm, Windows'ta da çalışır (hangi bash komutları çalışmaz).
dastrobu

g<CTRL-g>Kabul edilen cevaptaki gibi bir saniye sonra sayımın kaybolmamasını seviyorum .
Chester,

7

Mrucci'nin cevabına bir gelişme:

Sen kullanabilirsiniz wcyönlendirerek ilk dosyayı kaydetmek zorunda kalmadan linux üzerinde :waşağıdaki gibi komut çıktısını:

:w !wc -m

ve onu mrucci'nin bahsettiği gibi eşleştirebilirsin.


6
:help statusline

sana verir

o N   Byte number in file of byte under cursor, first byte is 1.
      Mnemonic: Offset from start of file (with one added)

Bu da probleminiz için iyi bir geçici çözümdür. sadece arabellek sonuna gidin Gve durum satırınızda gösterilen bayt sayısı karakter sayısıdır (çok baytlı karakterlerle doğru değil). geldiğin yere geri dön ctrlo.


1
Bu, çok baytlık karakterlerle sorunludur. Bu soruyu statusline% o koyduktan sonra buldum :)
Matt

@Matt: peki, çözüm nedir?
akira

1
mrucci'nin "g ^ g" normal moddaki çözümü benim için yeterliydi. Hızlı bir hata ayıklama için ihtiyacım vardı, bu yüzden durum bilgisinde bu bilgiyi almaya çalışmak için zaman ayırmadım.
Matt,


1
Dokümanlar belirsiz ve kafa karıştırıcı olduğundan, birisinin çalıştırması gereken belirli komutun set statusline+=\ %o\ %N (ilginç bir şekilde, örneğin "t S" öğesi için çalışmadığını) belirtilmesi önemlidir . O zaman durum çizgisini değişmeden görürseniz, bunun nedeni yürütme yapmanızdır set laststatus=2. Benim için mevcut şeffaf statü çizgisini yenisi ile değiştirdi, düz siyah ve sadece "bayt sayısı" maddesine sahip.
Hi-Angel

3

Dosyayı kaydetmek için: w kullanma alışkanlığınız varsa, bunu her yaptığınızda durum yazılı karakter sayısını geri bildirir. Örneğin, bu cümlenin sonunda şunu yaptım: w (evet, bu notu yazmak için gvim kullanıyorum) ve bildirildi: 245C yazıldı.


Bu bir kez kullanım için güzel golf.
Ciro Santilli 事件 15 中心 29 六四 事件

3

Tamponun bytecount'unu statusline ile görüntülemek için bir ifade ekleyebilirsiniz:

:set statusline+=\ %{\ line2byte(line(\"$\")+1)-1\ }B

Ya da tüm bu kaçmayı önlemek için seçenek değişkenini doğrudan değiştirebilirsiniz:

:let &statusline .= ' %{ line2byte(line("$")+1)-1 }B'

Bunu denediğimde, gVim kapatılmamış bir ifade dizisinden şikayet ediyor. Bir parantez eksik olduğunu fark ettim, ancak bunu düzeltmenin de faydası olmaz. İşte yeniden yazdıklarım:: set statusline =% {line2byte (line ("$"))}
OwenP

@OwenP: şimdi düzeltilmelidir
akira

1
Muhtemelen ...%{ line2byte(line(\"$\")+1))-1 }, sayının son satırındaki karakterleri içerecek şekilde istiyorsun . Bu yaklaşım olsa da, çok baytlık karakterleri doğru saymaz.
sezgiler

1
Ayrıca, boşluklardan kaçmanız veya onlardan kurtulmanız gerektiğini düşünüyorum.
Sezgi

@ İntuited'ın önerilerini içerecek şekilde düzenlendi, üzerine yazmak yerine durum satırına da eklendi.
joeytwiddle

0

Geçici çözüm mrucci'nin cevabını kabul edene kadar kullanıyorum:

Yanlışlıkla öğrendim ki: dosyayı kaydetmek için, komutun yazılan bayt sayısını çıkardığını öğrendim. Bu, az ya da çok bir karakter sayımıdır, yani şimdiye kadar yeterince yakındı. Mrucci'nin cevabını da sevdim, muhtemelen bundan daha fazla, çünkü kelime de var.


0

Metninizin bir kopyasını tutarsanız, metninizi diske yazın - karakter sayısı varsayılan olarak görüntülenir.

Bir dosyayı tutmak istemiyorsanız, sadece metin kaydetmek /dev/null: :w!/dev/null.

wcKarakterlerinizi saymaya da izin verebilirsiniz : :%!wc -c- ancak Umetninizi geri yüklemek için vurmayı unutmayın .

Buna sık sık ihtiyacınız olursa, bu komutları bir tuş sırasına göre eşleştirin: :map #wc :w!/dev/null^[- + ^[olarak girilmesi gerektiğini unutmayın .CtrlV Esc

Metin boyutunun ilk göstergesi olarak, satır numaralarını açmanız yeterlidir; kabul: Bu bazı zihinsel aritmetik ;-) ihtiyacı


0

Bu soruyu cevapladıktan ve cevapları okuduktan sonra (teşekkürler mrucci) Bu satırları .vimrc başlatma dosyama ekledim.

# get full statistics on the current buffer (not perfect, may redraw screen)
map ;gg           G$g<C-G>''
# get full statistics on the current position in the buffer
map ;gh           g<C-G>

Bunu vim'e bırakıyorum: kullanıcıların ne yaptıklarını anlamalarına yardımcı olun.

Şahsen Vim haritalarına başlamak için faydalı buluyorum; veya, nadiren onları komutun ilk karakteri olarak kullandığım için.

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.