Как считать символы в буфере, включая пробелы?

12

Мне нужно увидеть, сколько символов содержит мой текст, когда я печатаю. Я нашел эти страницы Emacs Wiki: Количество слов , и есть решение, очень близкое к тому, что мне нужно: я использовал второе решение с этой страницы (Показать количество слов в строке режима), потому что оно показывает количество персонажи тоже.

Но это не считается пробелами. Есть ли какое-либо решение, которое покажет количество символов, включая пробелы в строке состояния? В идеале, с заданным целевым количеством символов (но это не обязательно).

Aglavra
источник

Ответы:

4

Эта mode-line-formatпеременная уже имеет встроенную возможность, следующий фрагмент должен добавить ее в конец строки состояния.

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

Из документа:

% i - вывести размер буфера.

Технически это размер в байтах, поэтому он может не совпадать с количеством символов в зависимости от используемой кодировки.

Вы также можете попробовать M-x size-indication-mode.


Если количество байтов не удовлетворяет вас, вы можете использовать следующий фрагмент кода, который может вызывать или не вызывать задержку при вводе на очень больших буферах.

(add-to-list 'global-mode-string
             '(:eval (format " %s"
                       (let ((tab-width 1))
                         (string-width (buffer-string))))))
Malabarba
источник
10

Кроме того, подсчитайте слова и символы, включая пробелы в выделении:

M-x count-words-region
Кирилл Юнусов
источник
4

Или вы могли бы просто M->C-x =. Соответствующая информация появится в минибуфере. (Используемые команды: end-of-bufferи what-cursor-position).

wvxvw
источник
3

Я думаю, что другие ответы дали вам полезную информацию. Вы можете поместить все, что вы хотите, в строку режима, и одним из мест для начала является size-indication-modeпеременная переменная mode-line-position.

Другие ответы обычно сообщают вам текущую позицию буфера относительно начала буфера (или начала его текущего ограничения, если оно сужено).

Иногда вы можете захотеть положение относительно другой позиции. Для этого modeline-posn.elможет помочь библиотека (см. Положение строки режима ).

Когда регион не активен, он показывает вам обычную информацию (ну, немного лучше). Но когда он активен, он показывает вам (в строке режима) количество символов и строк в выделении (регион). Таким образом, чтобы увидеть текущую позицию относительно некоторой другой позиции, просто используйте, C-SPCчтобы установить метку в одной из позиций. C-x C-xактивирует регион, который показывает его размер в символах (и строках) в строке состояния.

Нарисовался
источник
2

Если я не понимаю, вы можете просто использовать, point-maxчтобы получить количество символов в буфере:

(defun count-chars ()
  (interactive)
  (save-restriction
    (widen)
    (message "%s characters" (1- (point-max)))))
Дэн
источник
1
Это работает, но это не совсем то, что я хочу: я хочу, чтобы количество символов всегда было перед моими глазами, пока я печатаю, не получая его «по требованию».
Аглавра
@Aglavra добавь его в свою строку мод.
Джордон Биондо
Ах. Вы можете попробовать size-indication-modeили изменить mode-line-positionпеременную, а затем.
Дан