2

В настоящее время я использую gVim в Windows XP, и у меня есть 2 продолжения моего основного вопроса:

Каков наилучший метод поиска строки с наибольшим количеством символов?

Мой текущий метод: я использую поиск по регулярному выражению :/^\(\p\)\{#number#,}$), и я продолжаю увеличивать целое число #number# пока не получу только одно совпадение. В случае с моим файлом это строка длиной всего 81 КБ, а не 916 657, как я думал ранее. Я знаю это, потому что когда курсор находится на этой строке, я нажимаю g + Ctrl+g и получаю количество столбцов 81K.

Продолжение 1) Является ли вопрос "What is the best method of finding the line with the most columns?" же, как № 2 выше?

Продолжение 2) Что означает второе число, когда я открываю файл и вижу следующую строку в нижней части экрана:



Я понимаю, что в этом файле содержится 14 871 строка, а по крайней мере одна строка содержит 916 657 столбцов. Я проверил, что файл имеет 14 871 строку, но я не смог понять цель второго (916 КБ).

4 ответа4

3

Должен быть лучший способ, но также подойдет следующее:

%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

Второе число - это общее количество символов во всем файле. Если вы делаете:

$ wc -l -c filename

Вы должны увидеть те же два числа (строки и общее количество символов). На самом деле, вы можете сделать:

:!wc -l -c %

Вот плагин с именем textfilter (скачать), который включает функцию для поиска самой длинной строки.

Или вы можете использовать это, чтобы найти длину самой длинной строки:

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

тогда вы можете использовать это число следующим образом:

/^.\{248\}$
1

Не могу ответить на первый вопрос, но второе число в сообщении о загрузке файла - это общее количество символов в файле.

1

Вот функция, которая делает это.

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("$") .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .