Vim/gVim で列数/文字数が最大となる行を見つけるにはどうすればよいでしょうか?

Vim/gVim で列数/文字数が最大となる行を見つけるにはどうすればよいでしょうか?

現在、Windows XP で gVim を使用していますが、私の中心的な質問に対して 2 つのフォローアップがあります。

最も多くの文字数を持つ行を見つける最良の方法は何ですか?

私の現在の方法:私は正規表現検索:/^\(\p\)\{#number#,}$) を使用し、一致するものが 1 つだけになるまで整数を増やし続けます#number#。私のファイルの場合、行の長さは 81K 文字だけで、以前考えていた 916,657 文字ではありません。カーソルがその行にあるときに を押すとg + Ctrl+g、列数が 81K と表示されるので、このことがわかります。

フォローアップ1)質問は"What is the best method of finding the line with the most columns?"上記の2番と同じですか?

フォローアップ2)ファイルを開いて画面の下部に次の行が表示された場合、2 番目の数字は何を意味しますか。

ここに画像の説明を入力してください

これは、ファイルには 14,871 行あり、少なくとも 1 行に 916,657 列があるという意味だと解釈しています。ファイルに 14,871 行あることを確認しましたが、2 番目 (916K) の目的を理解できませんでした。

答え1

2 番目の数字はファイル全体の文字数の合計です。次のようにすると:

$ wc -l -c filename

同じ 2 つの数値 (行数と合計文字数) が表示されます。実際には、次のように実行できます。

:!wc -l -c %

これはプラグインですテキストフィルターダウンロード) には、最長の行を見つける機能が含まれています。

または、これを使用して最長の線の長さを見つけることもできます。

:echo max(map(range(1, line('$')), "col([v:val, '$'])")) - 1

その番号を次のように使用できます。

/^.\{248\}$

答え2

もっと良い方法があるはずですが、次の方法も有効です。

%s/./a/g         "Replace everything with 'a's
sort!            "Sort by column length
ggy$             "Go to first line (longest) and copy it
u                "Undo the sorting
/<c-r>"          "Search for the longest line
mm               "Mark it 'm'
u                "Undo the replace
'm               "Go to the mark - there!

答え3

最初の質問にはお答えできませんが、ファイル読み込みメッセージの 2 番目の数字は、ファイル内の文字の合計数です。

答え4

それほど vim 中心ではなく、他の回答と似ていますが、人によってはより直感的かもしれません。これは、vim 内から外部プログラムを呼び出すことに問題がないことを前提としています。

ファイルには次のものがありますtest_file:

hello world
helloooooooooooooo world !!!
yo, world!
helloooOoooOooooOo World ! !

コマンドには、最長行のサイズを出力するオプションwcがある場合があります。これは私の例の出力です。-L28 test_file

これらの 28 文字の行 (およびその行番号) は、 で印刷できますgrep -nP ".{28}" test_file

2:helloooooooooooooo world !!!
4:helloooOoooOooooOo World ! !

wc出力は で解析できますcut。すべてをまとめて、1 つのコマンドを別のコマンドにつなげると、次のようになります。

grep -nP ".{$(wc -L test_file | cut -f 1 -d ' ')}" test_file

関連情報