VIMで強調表示された文字列の長さを数える


24

ハイライトされたシンボルvim(空白を含む)をカウントする方法はあるのでしょうか?

更新

VIMビジュアルモード

選択が複数の行にある場合、行数が表示されます。シンボルカウントが必要です。

回答:


28

何かが足りない限り、Vimはすでにそれを行っています。マウスを使用して、またはvカーソルを入力して移動することでテキストを強調表示すると、画面の下部に表示されます

-ビジュアル-12

ここで、右側の数字は強調表示された文字の数です。これは、選択が単一の行にある場合にのみ機能し、そうでない場合は行数を表示します。

また、テキストの一部の領域を視覚的に選択して、選択したg Ctrl-G行数、単語数、およびバイト数を表示することもできます。


4
(tun然とした)どうしてそんなに長くVimを使ったのに気づかなかったの?しかし、私の防御では、プログラムで数値を取得することを考えていました。
-njd

良い答えですが、更新された質問を見てください。@njdと同様、私はそれに気付かなかった。
ネモデン

1
@Nemoden:garyjohnの提案の2番目の部分を試してください(g Ctrl-G)。「Selected#of#Lines;#of#Words;#of#Bytes」のような行が表示されます。
ペス

ああ。私の悪い。2番目の解決策をスキップした理由がわかりません。できます。ありがとうございました!
ネモデン

12
一部のシステムでは、これはデフォルトで有効になっていません。を追加set showcmdしてvimrc有効にします。
タイラーホリエン

8

Vimは、視覚化する内容と方法に応じて、視覚化されたテキストの文字数と行数の表示を切り替えます(vim 7.4は2015年9月にパッチ適用)

V will display line count
v$ will display character count

複数の行を視覚化すると、行数のみが表示されます

g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line

質問が言うvように、選択範囲が複数行にわたる場合、通常の場合でも文字カウントから行カウントに切り替わります。しかしg CTRL-G、仕事はうまくいきます。
-joeytwiddle

2
:function VisualLength()
:  exe 'normal "xy'
:  echo "Visual: " . strlen(@x) . "\n"
:  exe 'normal gv'
:endfunction

:map ,q "xy:call VisualLength()<CR>
  1. 最初に、現在の選択を(バッファxに)ヤンク

  2. そして、あなたはそのバッファの長さを表示しますstrlen(@x)
    - VISUAL -私たちは改行を追加する必要がありますので、ステータスラインに表示されるが、これをあいまい)

  3. 前の視覚範囲を強調表示します。 gv

これは、ビジュアルモードが行モード、文字モード、ブロックモードのいずれであるかを考慮していませんが、ほとんどの場合はこれで十分です。


2

スクリーンショットから、あなたがWindowsで実行していることがわかります。そのため、この答えはあまり役に立たないかもしれません。しかし、他の人のために...

Vimの未使用(IMO)の機能は、外部コマンドに手間をかけることです。

この場合、UNIXのようなシステムを使用している場合は、wcコマンドを使用してそれを行うことができます。

最も簡単な方法は、入力したテキストを選択して、選択したテキストをコマンドの出力に置き換えることです。

:!wc

(次にEnterキーを押します)。

これは、コマンドラインに次のように表示されます。

'<,'>!wc

情報を読んだ後、で元に戻すと元uに戻ります。

注:この処理は行全体でのみ行われます。部分的な行が必要な場合g_CTRL-Gは、@ garyjohn's が最善の策だと思います。

代わりに実行することで、元に戻す必要を回避できます。

:w !wc

これにより、選択した行がコマンドの標準入力に「書き込まれ」、コマンドの出力が新しい一時バッファーに表示され、元のファイルは変更されません。詳細については:help :write_c、を参照してください。

注:https:write_c : //stackoverflow.com/questions/1237780/vim-execute-shell-command-without-filteringから情報を得ました

今、より一般的に:

この例wcはかなり単純ですが、これがどのように強力なアプローチであるか想像できます。UNIXにはすでに多くのテキスト処理コマンドが用意されており、Vimスクリプト(yech)に触れる必要なく、Vim内で簡単に使用できます。

さらに、stdin / stdoutを処理するコマンドラインプログラムは、ターミナルだけでなく、Vim内でも使用できるようになりました。

私が実行している、例えば、自分自身を発見tidyし、json-format私はより読みで探していたファイルを作るために内部のvimから。

Windowsでも同じことができますが、Windowsにはそのような豊富なコマンドセットが組み込まれていません。ただし、これらの利点を得るために、GNUWin32などをいつでもインストールできます。


1

vimscript内のプログラム的な方法では、選択が1行以内に制限されている場合、これが機能しました。

let amount = virtcol("'>") - virtcol("'<")

(のvirtcol(..)代わりに使用してcol(..):set ve=allアクティブなときに期待どおりに動作するようにします。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.