スペースを含むバッファ内の文字を数える方法は?


12

入力中に、テキストがいくつの文字に含まれるかを確認する必要があります。Emacs Wiki:Word countのこのページを見つけました。必要なものに非常に近い解決策があります。このページの2番目の解決策(モードラインの単語数を表示)を使用しました。文字も。

ただし、スペースはカウントされません。モードラインのスペースを含む文字数を表示する解決策はありますか?理想的には、目標の文字数を設定します(ただし、これは必須ではありません)。

回答:


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変数variableですmode-line-position

他の回答は一般に、バッファーの開始(または、狭められている場合は現在の制限の開始)に対する現在のバッファーの位置を示します。

場合によっては、他の位置との相対的な位置が必要になることがあります。そのために、ライブラリmodeline-posn.elが役立ちます(モード行の位置を参照)。

リージョンがアクティブでない場合は、通常の情報が表示されます(まあ、少し良いです)。ただし、アクティブな場合は、選択範囲(リージョン)の文字数と行数が(モード行に)表示されます。したがって、他の位置との相対的な現在の位置を確認するには、を使用C-SPCして、マークを位置の1つに設定します。 C-x C-xリージョンをアクティブにし、モードラインに文字(および行)でサイズを表示します。


2

私が誤解しているのでない限りpoint-max、バッファ内の文字数を取得するために使用することができます:

(defun count-chars ()
  (interactive)
  (save-restriction
    (widen)
    (message "%s characters" (1- (point-max)))))

1
それは機能しますが、これは私が望むものではありません。「オンデマンド」で取得するのではなく、入力している間、常に目の前に多くの文字を置きたいです。
Aglavra 2015年

@Aglavraをモードラインに追加します。
ジョードンビオンド2015年

ああ。size-indication-modeそのmode-line-position場合は、代わりにを試すか、変数を変更してください。
ダン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.