← Vim研究所

Vimでカーソル位置・単語数・文字数を確認する(Ctrl-g / g Ctrl-g)

2019-12-17 公開 ・ 更新: 2026-08-20

「今カーソルがファイル全体のどのあたりにいるか」「この文章は何文字あるか」を確認したいとき、文字数カウント用のプラグインは要りません。標準のキーバインドだけで済みます。用途に応じて2つのキーバインドを使い分けます。

目次(9項目)
キーこれだけ覚える
Ctrl-g現在位置と割合をざっくり確認
g Ctrl-g列・行・単語・文字・バイト数を詳細表示
ビジュアルモードでg Ctrl-g選択範囲だけの行・単語・バイト数

Ctrl-g:現在位置をざっくり確認する

ノーマルモードでCtrl-gを押すと、ファイル名と現在位置(行・列・ファイル全体に対する割合)がステータス行に表示されます。

Ctrl-g

同じ内容は:fileコマンド(短縮形:f)でも確認できます。

:file
:f

g Ctrl-g:列・行・単語・文字・バイトを詳細表示する

より詳しい情報が欲しいときはg Ctrl-gを使います。カーソル位置の列・行・単語・文字・バイト数がまとめて表示されます。

g Ctrl-g

実行結果はこのような形式になります。

列 1/0; 行 141/157; 単語 748/774; バイト 4489/4976

スラッシュの左が「現在位置」、右が「ファイル全体の総数」を表します。つまりこの例では、ファイル全体774単語のうち748番目の単語にカーソルがある、と読み取れます。

日本語の文章でg Ctrl-gを押した画面。最下行に桁・行・単語・文字・バイトの数が現在位置と全体の両方で表示されている
Vim 9.1.1752。日本語の文章で g Ctrl-g を押したところ。単語数は当てにならないが文字数は使える

ファイル全体・選択範囲の単語数を数える

ファイル全体の単語数・文字数だけを知りたい場合も、同じg Ctrl-gで確認できます(右側の総数を確認すれば十分です)。選択範囲だけを数えたい場合は、ビジュアルモードでテキストを選択してからg Ctrl-gを押します。

選択 5/293 行; 70/1884 単語; 359/10928 バイト

特定の2点間だけを数えたい場合、テキスト先頭でg Ctrl-g、末尾でもう一度g Ctrl-gを実行して両者の単語数を引き算する方法もありますが、素直にビジュアルモードで範囲選択したほうが早く済みます。

要点:ざっくり位置を知りたいだけならCtrl-g、単語数・文字数まで欲しいならg Ctrl-g。範囲を数えたいならビジュアルモードで選択してからg Ctrl-g

置換コマンドで柔軟にカウントする

特定のパターンだけを数えたい場合は、置換コマンドの末尾にnフラグを付ける方法も使えます。nを付けると実際には置換されず、マッチ件数だけが表示されます。

:%s/./&/gn      " ファイル全体の文字数
:%s/\i\+/&/gn   " ファイル全体の単語数
:%s/^//n        " ファイル全体の行数

これを応用すれば、特定の単語だけの出現回数を数えることもできます。

:%s/TODO/&/gn

g Ctrl-gより覚えにくいものの、条件を柔軟に指定できるのが強みです。用途によって使い分けると便利です。

使ってみて

記事の文字数を確認するのにg Ctrl-gを使っていますが、ビジュアルモードで本文だけを選択してから実行すれば、見出しやコードブロックを除いた実質的な文字数を素早く把握できます。置換コマンドのnフラグは、特定のキーワードが何回登場するか数えたいときに重宝しています。

日本語は単語として数えられない

単語数を当てにする前に知っておきたいのが、Vimが空白で単語を区切っている点です。日本語の文章は空白が無いので、1行が丸ごと1単語として数えられます。

手元のVim 9.1.1752で「これは日本語のテスト行です。」と hello world foo の2行を数えると、文字数31・バイト数59・単語数4でした。単語数の4は、日本語の行が1つ、英語の3語を足した数です。

:echo wordcount()
" {'chars': 31, 'words': 4, 'bytes': 59, ...}

日本語の原稿量を測るなら、単語数ではなく文字数(chars)を見ます。バイト数は文字コードによって変わるので、分量の目安には向きません。

ステータスラインに常時出す

数えるたびにキーを押すのが面倒なら、wordcount() の値をステータスラインに埋め込めます。原稿を書いている間ずっと文字数が見える状態になります。

set laststatus=2
set statusline=%f\ %m%=%{wordcount().chars}字\ %l/%L

関数はステータスラインを描き直すたびに呼ばれるので、巨大なファイルでは動きが重くなることがあります。文章を書くファイルタイプだけで有効にするなら、autocmd FileType markdown setlocal statusline=... の形で絞ってください。ステータスラインの表示そのものの設定はlaststatusの記事にまとめています。

外部のコマンドに数えさせる

手元のコマンドに任せる方法もあります。:w ! はバッファの内容を外部コマンドの標準入力に渡すだけで、ファイルには書き込みません。

:%w !wc -m        " 文字数を数える
:'<,'>w !wc -l     " 選択範囲の行数を数える

同じ2行のファイルで :%w !wc -m を実行すると31と返り、wordcount() の文字数と一致しました。改行を含めた数え方が同じだということです。集計を細かくしたいときは grep -cawk に渡せるので、Vimの機能を覚え直さずに済みます。

まとめ

位置確認にはCtrl-g、単語・文字・バイト数まで含めた詳細確認にはg Ctrl-gを使います。特定パターンの出現回数を数えたいときは、置換コマンドのnフラグが柔軟に使えます。選んだ範囲だけを数えたいときは、ビジュアルモードで選択してからgCtrl-gを押します。ファイル全体の情報が要るのか選択範囲だけで足りるのかで使い分けると、目的の数字に早く辿り着けます。行の並べ替えや重複行の削除まで含めて整理したいなら:sortの記事、読み取り専用で開いて壊さずに数えたいだけなら-Rオプションが使えます。

関連記事

← Vim研究所 トップへ戻る