Jak liczyć znaki w buforze, w tym spacje?

12

Muszę zobaczyć, ile znaków zawiera mój tekst podczas pisania. Znalazłem te strony Emacs Wiki: Liczba słów i istnieje rozwiązanie bardzo zbliżone do tego, czego potrzebuję: użyłem drugiego rozwiązania z tej strony (Pokaż liczbę słów w wierszu trybu), ponieważ pokazuje on liczbę także postacie.

Ale nie liczy spacji. Czy istnieje jakieś rozwiązanie, które wyświetla liczbę znaków, w tym spacje w wierszu trybu? Idealnie, z ustawieniem docelowej liczby znaków (ale nie jest to konieczne).

Aglavra
źródło

Odpowiedzi:

4

mode-line-formatZmienna ma już takiej możliwości wbudowanego w następujący fragment powinien dodać, że pod koniec swojego trybu-line.

(add-to-list 'global-mode-string '(" %i"))

Z dokumentu:

% i - wydrukuj rozmiar bufora.

Technicznie jest to rozmiar w bajtach, więc może nie pasować idealnie do liczby znaków w zależności od używanego kodowania.

Można również spróbować M-x size-indication-mode.


Jeśli liczba bajtów Cię nie satysfakcjonuje, możesz użyć następującego fragmentu kodu, który może powodować opóźnienie podczas pisania na bardzo dużych buforach.

(add-to-list 'global-mode-string
             '(:eval (format " %s"
                       (let ((tab-width 1))
                         (string-width (buffer-string))))))
Malabarba
źródło
10

Możesz też policzyć słowa i znaki, w tym spacje w zaznaczeniu:

M-x count-words-region
Kirill Yunussov
źródło
4

Lub możesz po prostu M->C-x =. Odpowiednie informacje pojawią się w minibuforze. (Użyte polecenia: end-of-bufferi what-cursor-position).

wvxvw
źródło
3

Sądzę, że inne odpowiedzi dały ci przydatne informacje. Możesz umieścić cokolwiek chcesz w linii trybu, a jednym miejscem do rozpoczęcia jest size-indication-modezmienna zmienna mode-line-position.

Pozostałe odpowiedzi ogólnie mówią o aktualnej pozycji bufora względem początku bufora (lub początku jego obecnego ograniczenia, jeśli jest zawężony).

Czasami możesz chcieć pozycji względem innej pozycji. W tym celu modeline-posn.elmoże pomóc biblioteka (patrz Pozycja linii trybu ).

Gdy region nie jest aktywny, wyświetla zwykłe informacje (nieco lepiej). Ale kiedy jest aktywny, pokazuje (w linii trybu) liczbę znaków i linii w zaznaczeniu (regionie). Aby zobaczyć bieżącą pozycję w stosunku do innej pozycji, po prostu użyj, C-SPCaby ustawić znak w jednej z pozycji. C-x C-xaktywuje region, który pokazuje jego rozmiar w znakach (i liniach) w linii trybu.

Rysował
źródło
2

O ile się nie mylę, możesz po prostu użyć point-maxliczby znaków w buforze:

(defun count-chars ()
  (interactive)
  (save-restriction
    (widen)
    (message "%s characters" (1- (point-max)))))
Dan
źródło
1
Działa, ale nie jest to dokładnie to, czego chcę: chcę mieć liczbę znaków zawsze na moich oczach, podczas gdy piszę, nie dostaję jej „na żądanie”.
Aglavra,
@Aglavra dodaj go do linii trybu.
Jordon Biondo
Ach Zamiast tego możesz spróbować size-indication-modelub zmodyfikować mode-line-positionzmienną.
Dan