Policz podświetloną długość łańcucha w VIM

24

Zastanawiam się, czy istnieje sposób na policzenie wyróżnionych symboli vim(w tym białych spacji)?

AKTUALIZACJA

Tryb wizualny VIM

Pokazuje liczbę wierszy, jeśli mój wybór dotyczy wielu wierszy. Potrzebuję symboli.

Nemoden
źródło

Odpowiedzi:

28

O ile mi czegoś nie brakuje, Vim już to robi. Jeśli zaznaczę jakiś tekst za pomocą myszy lub wpisując vi przesuwając kursor, widzę u dołu ekranu

- WIZUALNE - 12

gdzie liczba po prawej to liczba wyróżnionych znaków. Działa to tylko wtedy, gdy zaznaczenie jest w jednym wierszu, w przeciwnym razie pokazuje liczbę wierszy.

Możesz także wizualnie wybrać region i typ tekstu, g Ctrl-Gktóry pokaże liczbę wybranych wierszy, słów i bajtów.

garyjohn
źródło
4
(oszołomiony) Jak do cholery użyłem Vima tak długo i nigdy tego nie zauważyłem ? Ale w mojej obronie zastanawiałem się nad uzyskaniem numeru programowo.
njd
Dobra odpowiedź, ale spójrz na zaktualizowane pytanie. Tak jak @njd tego nie zauważyłem.
Nemoden
1
@Nemoden: Wypróbuj drugą część sugestii garyjohn (g Ctrl-G). Powinien pokazywać wiersz taki jak „Wybrane # z # linii; # z # słów; # z # bajtów.”
peth
O. Mój błąd. Nie wiem, dlaczego pominąłem drugie rozwiązanie. To działa. Dziękuję Ci!
Nemoden
12
To nie jest domyślnie włączone w niektórych systemach. Po prostu dodaj set showcmddo swojego, vimrcaby go włączyć.
Tyler Holien
8

Vim przełącza się między wyświetlaniem liczby znaków a liczbą wierszy dla wyświetlanego tekstu w zależności od tego, co i jak wizualizujesz (vim 7.4 załatany do września 2015)

V will display line count
v$ will display character count

Jeśli wizualizujesz więcej niż jedną linię, wyświetla tylko liczbę linii

g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line
zzapper
źródło
Jak mówi pytanie, nawet normalne vprzełączanie z liczby znaków na liczbę wierszy, jeśli zaznaczenie obejmuje wiele linii. Jednak g CTRL-Gdobrze się spisuje.
joeytwiddle
2
:function VisualLength()
:  exe 'normal "xy'
:  echo "Visual: " . strlen(@x) . "\n"
:  exe 'normal gv'
:endfunction

:map ,q "xy:call VisualLength()<CR>
  1. Najpierw szarpniesz bieżący wybór (do bufora x)

  2. Następnie wyświetlasz długość tego bufora: strlen(@x)
    ( - VISUAL - wyświetlany w wierszu stanu przesłania to, więc musimy dodać nowy wiersz)

  3. Podkreśl poprzedni zakres wizualny: gv

Nie uwzględnia to, czy trybem wizualnym był tryb liniowy, znakowy czy blokowy, ale w większości przypadków wystarcza.

njd
źródło
2

Z twojego zrzutu ekranu widzę, że korzystasz z systemu Windows, więc ta odpowiedź może ci nie pomóc. Ale dla innych ...

Niedostatecznie używana (IMO) funkcja Vima polega na tym, że zewnętrzne polecenia wykonują ciężkie podnoszenie.

W tym przypadku, jeśli korzystasz z systemu typu UNIX, możesz to zrobić za pomocą wcpolecenia.

Najprostszym sposobem jest zastąpienie zaznaczonego tekstu wynikiem polecenia, wpisując (z zaznaczonym tekstem):

:!wc

(następnie naciśnij enter).

To pokaże w linii poleceń jako:

'<,'>!wc

Po przeczytaniu informacji możesz cofnąć, uaby wrócić do miejsca rozpoczęcia.

Uwaga: Przetwarzanie odbywa się tylko na całych liniach . Jeśli chcesz częściowe linie, myślę, że @ garyjohn's g_CTRL-Gjest najlepszym wyborem .

Możesz uniknąć konieczności cofania, uruchamiając zamiast tego:

:w !wc

Spowoduje to „zapisanie” wybranych wierszy do standardowego wejścia polecenia, a wynik polecenia zostanie wyświetlony w nowym buforze tymczasowym, pozostawiając oryginał niezmieniony. Zobacz :help :write_cwięcej informacji.

Uwaga: Mam :write_cinformacje od: /programming/1237780/vim-execute-shell-command-without-filtering

Teraz bardziej ogólnie:

Ten przykład z wcjest dość uproszczony, ale możesz sobie wyobrazić, jak to jest potężne podejście. W systemie UNIX dostępnych jest już wiele poleceń przetwarzania tekstu i można ich używać w Vimie dość łatwo, bez konieczności dotykania Vimscript (yech).

Co więcej, każdy napisany przez ciebie program wiersza poleceń, który zajmuje się stdin / stdout, może teraz przynieść korzyści nie tylko na twoim terminalu, ale także w Vimie.

Uważam się na przykład za uruchomionego tidyi json-formatod wewnątrz vima, aby pliki, na które patrzę, były bardziej czytelne.

Możesz zrobić to samo w systemie Windows, ale system Windows nie ma wbudowanego tak bogatego zestawu poleceń. Jednak zawsze możesz zainstalować GNUWin32 lub podobny, aby uzyskać te korzyści.

jwd
źródło
1

Dla programowego sposobu w vimscript działało to dla mnie, gdy wybór jest ograniczony do jednego wiersza:

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

(Używanie virtcol(..)zamiast col(..), aby :set ve=alldziałało zgodnie z oczekiwaniami, gdy jest aktywne).

Jewgienij Siergiejew
źródło