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


12

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

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

Ответы:


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))))))


4

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


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переменную, а затем.
Дан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.