web-dev-qa-db-ja.com

Vim / gVimの列/文字の最大数の行を見つける方法は?

現在、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番目の数字はどういう意味ですか。

enter image description here

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

2
drapkin11

2番目の数値は、ファイル全体の合計文字数です。もしあなたがそうするなら:

$ wc -l -c filename

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

:!wc -l -c %

これが textfilterdownload )というプラグインで、最長の行を見つける関数が含まれています。

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

: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!
4
Eelvex

最初の質問に話すことはできませんが、ファイルロードメッセージの2番目の数字は、ファイル内の文字の総数です。

1
geekosaur

これを行う関数は次のとおりです。

_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("$")に置き換えます。

1
garyjohn