VIM'de vurgulanan dize uzunluğunu say


24

Vurgulanan sembolleri vim(beyaz boşluklar dahil) saymanın bir yolu var mı?

GÜNCELLEŞTİRME

VIM görsel modu

Seçimim birden çok satırdaysa satır sayısını gösterir. Sembol saymaya ihtiyacım var.

Yanıtlar:


28

Bir şeyi kaçırmıyorsam, Vim zaten bunu yapıyor. Fareyi kullanarak veya vimleci yazıp hareket ettirerek bazı metni vurgularsam , ekranın altında

- GÖRSEL - 12

sağdaki sayı, vurgulanan karakterlerin sayısıdır. Bu sadece seçim tek bir satırdaysa çalışır, aksi halde satır sayısını gösterir.

Ayrıca g Ctrl-G, seçilen satır, sözcük ve bayt sayısını gösterecek bir metin ve tür bölgesi görsel olarak da seçebilirsiniz .


4
(sersemlemiş) Nasıl halt Vim bu kadar uzun süre kullanmak ve fark asla yoktu o ? Fakat savunmamda, sayıyı programlı olarak almayı düşünüyordum.
08

İyi cevap, ancak güncellenmiş soruya bir göz atın. @ Njd kadar bunun da farkında değildim.
Nemoden

1
@Nemoden: Garyjohn'un önerisinin ikinci bölümünü dene (g Ctrl-G). "Seçilen # Satır #; # # #; # # # Bayt." Gibi bir satır göstermelidir.
peth

Ah. Benim hatam. İkinci çözümü neden atladığımı bilmiyorum. İşe yarıyor. Teşekkür ederim!
Nemoden

12
Bu, bazı sistemlerde varsayılan olarak etkin değildir. Sadece eklemek set showcmdsenin için vimrcetkinleştirmek için.
Tyler Holien

8

Vim, neye ve nasıl görselleştirdiğinize bağlı olarak görselleştirilmiş metin için karakter sayımı ile satır sayımı arasında geçiş yapar (vim 7.4 Eylül 2015’e yamalı)

V will display line count
v$ will display character count

Birden fazla satır görselleştirirseniz, sadece satır sayısını gösterir.

g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line

Sorunun söylediği gibi, vseçim birden fazla satıra yayılırsa normal sayım karakter sayımından satır sayımına da geçer. Ancak g CTRL-Giş güzel yapar.
joeytwiddle

2
:function VisualLength()
:  exe 'normal "xy'
:  echo "Visual: " . strlen(@x) . "\n"
:  exe 'normal gv'
:endfunction

:map ,q "xy:call VisualLength()<CR>
  1. İlk önce geçerli seçimi seçmelisiniz (x tamponuna)

  2. Ardından bu tamponun uzunluğunu görüntülersiniz: strlen(@x)
    ( Durum satırında gösterilen - VISUAL - bunu engeller, bu yüzden yeni bir satır eklemek zorundayız)

  3. Önceki görsel aralığını vurgulayın: gv

Bu görsel modun çizgi, karakter ya da blok modu olup olmadığını hesaba katmaz, ancak çoğu durumda bu yeterlidir.


2

Ekran görüntünüzden Windows’ta çalıştığınızı görüyorum, bu nedenle bu yanıt size pek yardımcı olmayabilir. Ama diğerleri için ...

Vim'in az kullanılmış (IMO) bir özelliği de dış komutların ağır kaldırma işlemini yapmasına izin vermektir.

Bu durumda, UNIX benzeri bir sistemdeyseniz, bunu wcyapmak için komutu kullanabilirsiniz .

En basit yöntem, seçilen metni komutun çıktısıyla değiştirerek (seçili metin seçilerek):

:!wc

(daha sonra enter tuşuna basın).

Bu komut satırında şöyle gösterecektir:

'<,'>!wc

Bilgileri okuduktan sonra, ubaşladığınız yere geri dönmek için geri alabilirsiniz.

Not: Bu işlem yalnızca tüm satırlarda yapılır . Kısmi çizgiler istiyorsanız, @ garyjohn en g_CTRL-Giyi bahistir bence .

Çalıştırarak geri alma gereksinimini önleyebilirsiniz:

:w !wc

Bu, seçilen satırları komutun standart girişine "yazar" ve komutun çıktısı orijinal dokunulamayacak şekilde bırakılarak yeni bir geçici tamponda görüntülenir. Daha :help :write_cfazla bilgi için bakınız .

Not: :write_cBilgileri aldım: /programming/1237780/vim-execute-shell-command-without-filtering

Şimdi, daha genel olarak:

Bu örnek wcoldukça basit, ancak bunun nasıl güçlü bir yaklaşım olduğunu hayal edebilirsiniz. UNIX'in hali hazırda birçok metin işleme komutu vardır ve bunları Vimscript'e (yech) dokunmaya gerek kalmadan Vim içinde kolayca kullanabilirsiniz.

Ayrıca, stdin / stdout ile ilgilenen herhangi bir komut satırı programı artık sadece sizin terminalinizde değil, Vim'in içinde de size fayda sağlayabilir.

Kendimi, örneğin çalışan tidyve json-formatiçimden çekip bulabildiğim dosyaları daha okunaklı hale getirmek için buluyorum .

Aynısını Windows'ta da yapabilirsiniz, ancak Windows bu kadar zengin bir komut setine sahip değildir. Olsa da, bu avantajlardan yararlanmak için her zaman GNUWin32'yi veya benzerlerini yükleyebilirsiniz .


1

Vimscript içinde programatik bir şekilde, bu seçim bir satır içinde sınırlı olduğunda benim için çalıştı:

let amount = virtcol("'>") - virtcol("'<")

(Kullanma virtcol(..)yerine col(..)ne zaman beklendiği gibi çalışır, öyle ki, :set ve=allaktiftir.)

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.