如何计算包含空格的缓冲区中的字符?


12

我需要查看输入文字时包含多少个字符。我找到了Emacs Wiki的以下页面:Word count,并且有一个非常接近我需要的解决方案:我使用了该页面的第二个解决方案(在模式行中显示单词数),因为它显示了字符。

但这不算空格。是否有解决方案,将在模式行中显示一定数量的字符(包括空格)?理想情况下,设置目标字符数(但这不是必需的)。

Answers:


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-bufferwhat-cursor-position)。


3

我认为,其他答案也为您提供了有用的信息。您可以在模式行中放置任何内容,其中一个开始是size-indication-modevariable 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 2015年

@Aglavra将其添加到您的模式行。
Jordon Biondo

啊。您可能想要尝试size-indication-mode,或者mode-line-position改为修改变量。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.