
В настоящее время я использую gVim на Windows XP, и у меня есть два дополнительных вопроса к моему основному вопросу:
Какой лучший способ найти строку с наибольшим количеством символов?
Мой текущий метод:Я использую поиск по регулярным выражениям :/^\(\p\)\{#number#,}$
), и я продолжаю увеличивать целое число, #number#
пока не получу только одно совпадение. В случае моего файла это строка всего из 81 тыс. символов, а не 916 657, как я думал раньше. Я знаю это, потому что когда курсор находится на этой строке, я нажимаю g + Ctrl+g
и получаю количество столбцов 81 тыс.
Продолжение 1)Вопрос "What is the best method of finding the line with the most columns?"
тот же, что и в пункте 2 выше?
Продолжение 2)Что означает вторая цифра, когда я открываю файл и вижу следующую строку внизу экрана:
Я интерпретирую это так, что файл содержит 14 871 строку, и по крайней мере одна строка содержит 916 657 столбцов. Я проверил, что файл содержит 14 871 строку, но я не смог понять назначение второй (916K).
решение1
Второе число — общее количество символов во всем файле. Если вы это сделаете:
$ wc -l -c filename
вы должны увидеть те же два числа (строки и общее количество символов). Фактически, вы можете сделать:
:!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
Не могу ответить на первый вопрос, но второе число в сообщении о загрузке файла — это общее количество символов в файле.
решение4
Не так ориентирован на vim и похож на некоторые другие ответы, но, возможно, более интуитивно понятен для некоторых людей. Это предполагает, что вы не против вызова некоторых внешних программ из vim.
У меня в файле есть следующее test_file
:
hello world
helloooooooooooooo world !!!
yo, world!
helloooOoooOooooOo World ! !
wc
Иногда команда имеет опцию -L
, которая выводит размер самой длинной строки. 28 test_file
Это вывод для моего примера.
Вы можете распечатать эти 28 строк символов (и их номера строк) с помощью grep -nP ".{28}" test_file
.
2:helloooooooooooooo world !!!
4:helloooOoooOooooOo World ! !
Вы можете проанализировать wc
вывод с помощью cut
. Собрав все вместе и вставив одну команду в другую, получим:
grep -nP ".{$(wc -L test_file | cut -f 1 -d ' ')}" test_file