web-dev-qa-db-ja.com

現在のファイルの文字数を表示するにはどうすればいいですか?

私はよく使うプログラミングフォーラムのためのチュートリアルや記事を書くのが好きです。このフォーラムは投稿ごとに文字数制限があります。私は過去にメモ帳++を使って投稿を書いていましたが、ステータスバーにライブの文字数を記録しています。私はもっ​​とgVimを使い始めていて、現時点ではNotepad ++に戻りたくはありませんが、この文字数を数えることは非常に便利です。カウントを超えると、通常はメモ帳++に投稿を貼り付けることになります。そのため、制限に達するまでトリミングしたときに表示されます。

私は:set rulerが役に立つだろうという提案を見ました、しかしこれは現在の行の現在の列インデックスを通して文字数を与えるだけです。段落区切りを使用しなかった場合、これは素晴らしいことですが、1段落で数千文字を読むのは快適ではないことに同意すると思います。

ヘルプを読み、rulerformatがうまくいくと思いましたが、それが使用しているstatuslineフォーマットを調べた後、現在のバッファの文字数を示すものは何も見当たりませんでした。

私はこれを追加するプラグインがあることを見ました、しかし私はまだgVimに私のつま先を浸しています、そして私は彼らが何をするか理解する前に私がランダムプラグインをロードしたいかどうかわかりません。私はvimに組み込まれているものを使用したいのですが、それが存在しなければそれは存在しません。

目標を達成するために何をすればいいですか。それがプラグインを含むならば、あなたはそれを使います、そして、それはどれくらいうまく働きますか?

81
OwenP

通常モードでg CTRL-Gを押すと、カーソルとファイルに関する統計情報が表示されます。

Linuxの場合は、現在のファイルの文字数を取得するためにwc -mを使用できます。

:!wc -m %

これはリアルタイムでは更新されないので、このコマンドを次のようなものにマップしたいと思うかもしれません。

map <F4> :!wc -m %<CR>
137
mrucci
:help count-items

あなたはどちらかの代替alaの空運転をすることができることを示唆している、

:%s/./&/gn

(これはマッチした文字数を報告します)あるいは視覚的に選択されたテキストにstrlen()の空想をすることです:

:echo strlen(@")

( "は名前なしレジスタです)

ステータスラインで%{myfunc()}のような式を呼び出すことができるので、それは良い出発点になるかもしれません。テキスト全体を選択してそれをヤンクする必要があるため、すべての時間を数えるのは少し時間がかかりますが、 " - register"にバイト数を表示しても問題ありません。バッファ内の文字数:バッファ内のすべてのテキストを視覚的に選択してそれをヤンクするだけなので、解決策は次のようになります。

 :set statusline=%{strlen(@")}

これは、 " - register(現在のバッファを選択してヤンクした場合のバイト数と同じ)の中の文字数を表示します。

23
akira

Mrucciの答えに対する強化:

次のように:wコマンドの出力を指示することによって、最初にファイルを保存しなくてもLinuxでwcを使用できます。

:w !wc -m

そして、あなたはそれをmrucciによって言及された何かにマッピングすることができます。

7
architectonic
:help statusline

あなたにあげる

o N   Byte number in file of byte under cursor, first byte is 1.
      Mnemonic: Offset from start of file (with one added)

これはあなたの問題に対する良い回避策です。バッファの最後まで G ステータスラインに表示されるバイト数は文字数です(もちろんマルチバイト文字では正しくありません)。一緒に来た場所に戻る ctrlo

6
akira

次のようにして、ステータスラインにバッファのバイト数を表示する式を追加できます。

:set statusline+=\ %{\ line2byte(line(\"$\")+1)-1\ }B

または、エスケープを回避するためにオプション変数を直接変更することもできます。

:let &statusline .= ' %{ line2byte(line("$")+1)-1 }B'
3
akira

:wを使用してファイルを保存する習慣がある場合は、これを実行するたびに、状況は書き込まれた文字数を報告します。例えば、この文の終わりに私は:w(はい、私はこのメモを書くためにgvimを使っています)をしました。

3
Erin Thomas

テキストのファイルコピーを保存する場合は、テキストをディスクに書き込むだけです。デフォルトでは文字数が表示されます。

ファイルを保存したくない場合は、テキストを/dev/null:w!/dev/nullに保存するだけです。

wcにあなたのキャラクターをカウントさせることもできます::%!wc -c - しかしヒットすることを忘れないでください U あなたのテキストを復元します。

これがよく必要な場合は、以下のコマンドをキーシーケンスにマッピングしてください。:map #wc :w!/dev/null^[ - ^[は次のように入力する必要があります。 Ctrl+VEsc

テキストサイズの最初の指標として、行番号をオンにするだけです。認められた:これはいくつかの精神的な算術を必要とする;-)

0
kdo

回避策私はmrucciの答えを受け入れるまで使ってきました:

私はファイルを保存するためにwを実行すると、偶然にコマンドが書き込まれたバイト数を出力することを知りました。これは多かれ少なかれ文字数なので、今のところ十分に近いです。私はmrucciの答えも同様に好きです。おそらくWordのカウントもあるからです。

0
OwenP

この質問をして答えを読んだ後(Thanks mrucci)、これらの行を私の.vimrc初期設定ファイルに追加しました。

# get full statistics on the current buffer (not perfect, may redraw screen)
map ;gg           G$g<C-G>''
# get full statistics on the current position in the buffer
map ;gh           g<C-G>

私はそれをvimに任せます:ユーザが彼らが何をしているのか理解するのを助けます。

個人的にはVimのマッピングを始めるのが便利だと思います。または、コマンドの最初の文字として使用することはめったにありません。

0
David E.