現在、Windows XPでgVimを使用していますが、コアとなる質問に対して2つのフォローアップがあります。
文字数が最も多い行を見つける最良の方法は何ですか?
現在の方法:正規表現検索:/^\(\p\)\{#number#,}$
)を使用し、整数#number#
を取得するまで増やし続けますたった1つの一致。私のファイルの場合、これはわずか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)の目的を理解できませんでした。
2番目の数値は、ファイル全体の合計文字数です。もしあなたがそうするなら:
$ wc -l -c filename
同じ2つの数字(行と合計文字)が表示されます。実際、次のことができます。
:!wc -l -c %
これが textfilter ( download )というプラグインで、最長の行を見つける関数が含まれています。
または、これを使用して最長の行の長さを見つけることができます。
:echo max(map(range(1, line('$')), "col([v:val, '$'])")) - 1
次に、その番号を次のように使用できます。
/^.\{248\}$
より良い方法があるはずですが、次の方法でも可能です。
%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!
最初の質問に話すことはできませんが、ファイルロードメッセージの2番目の数字は、ファイル内の文字の総数です。
これを行う関数は次のとおりです。
_function MaxLine()
let maxcol = 0
let lnum = 1
while lnum <= line("$")
call cursor(lnum, 0)
if col("$") > maxcol
let maxcol = col("$")
let maxline = lnum
endif
let lnum += 1
endwhile
echo "Line" maxline "has" maxcol - 1 "characters"
endfunction
_
あなたはそれを実行することができます
_:call MaxLine()
_
または、それを呼び出すコマンドまたはマッピングを定義します。
最も実際の列を持つ行を見つけることは、最も多くの文字を持つ行と同じであることに注意してください。これは、バイト数が最も多い行と同じではない場合があります。仮想列が最も多い行を検索する場合は、col("$")
をvirtcol("$")
に置き換えます。