Как найти строку с максимальным количеством столбцов / символов в Vim / gVim?
3694
drapkin11
В настоящее время я использую 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 КБ).
Спасибо всем за ответы. Каждый атакует проблему под другим углом! Показывает универсальность Vim.
drapkin11 13 лет назад
0
Для его простоты и элегантности я буду использовать [Денис Уильямсон] (http://superuser.com/questions/255368/how-to-find-the-line-with-the-maximum-number-of-columns-characters- in-vim-gvim / 255438 # 255438) подход. Из [Eelvex] (http://superuser.com/questions/255368/how-to-find-the-line-with-the-maximum-number-of-columns-characters-in-vim-gvim/255401#255401 ) я буду продолжать оттачивать свои команды vim и от [garyjohn] (http://superuser.com/questions/255368/how-to-find-the-line-with-the-maximum-number-of -columns-characters-in-vim-gvim / 255434 # 255434), мой сценарий vim.
drapkin11 13 лет назад
1
Должен быть лучший способ, но также подойдет следующее:
%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!
[Garyjohn] (http://superuser.com/questions/255368/how-to-find-the-line-with-the-maximum-number-of-columns-characters-in-vim-gvim/255434#255434) это лучший способ :)
Eelvex 13 лет назад
1
Благодарю. Между тем, [Деннис] (http://superuser.com/questions/255368/how-to-find-the-line-with-the-maximum-number-of-columns-characters-in-vim-gvim/255438# 255438) также подошел, и я думаю, что другие будут следовать :)
Eelvex 13 лет назад
0
/«... что делает эта команда? Я посмотрел ее, и это означает« Повторить »? После нажатия Я вижу кавычки, затем, когда я нажимаю ", то, что я ранее скопировал, вставляется. Но я не уверен, что" на самом деле здесь делает.
drapkin11 13 лет назад
0
@ drapkin11: см. справку для `i_CTRL-R` = режим вставки``. Он вставляет содержимое регистра. `" `- это регистр" последней копии или вырезки ".
Eelvex 13 лет назад
1
3
Dennis Williamson
Второе число - это общее количество символов во всем файле. Если вы делаете:
$ wc -l -c filename
Вы должны увидеть те же два числа (строки и общее количество символов). На самом деле, вы можете сделать:
:!wc -l -c %
Вот плагин с именем textfilter ( скачать ), который включает функцию для поиска самой длинной строки.
Или вы можете использовать это, чтобы найти длину самой длинной строки:
тогда вы можете использовать это число следующим образом:
/^.\$
Я думаю, что вам нужно `col ()`, если число должно использоваться вместе с `/ ^. \ ` (`$` здесь необязательно)
Eelvex 13 лет назад
0
@Eelvex: я сделал это исправление.
Dennis Williamson 13 лет назад
1
очень интересно - я никогда не думал об использовании Vim вместо вашей строки 3 ": echo max (map (range ...")
drapkin11 13 лет назад
0
@ drapkin11: Это из `: h virtcol ()`
Dennis Williamson 13 лет назад
1
`:! wc%` покажет вам количество строк, слов и символов в * текущей сохраненной версии * текущего файла вместе с именем файла. (Если вам не нужны все три числа, используйте опции, чтобы указать те, которые вы хотите.) Чтобы получить числа (и), но не показывать имя файла, используйте `:! Wc <%`. Чтобы получить количество * для текста, находящегося в данный момент в буфере редактирования *, используйте `: w! Wc`. (Конечно, вы можете получить ту же информацию с помощью `g`, а затем` Ctrl + G`.)
Scott 9 лет назад
0
1
geekosaur
Не могу ответить на первый вопрос, но второе число в сообщении о загрузке файла - это общее количество символов в файле.
1
garyjohn
Вот функция, которая делает это.
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("$").
это вдохновляет меня на изучение сценариев в Vim. Функция работает, но по какой-то причине мне нужно запустить ее дважды ... в первый раз ничего не возвращается, во второй раз она выдает "Line" maxline "имеет" maxcol - 1 "символов" ... Я думаю, это предназначено.
drapkin11 13 лет назад
0
Нет, это должно работать одинаково каждый раз. Я могу воспроизвести это поведение на Vim 7.3.125 в системе Fedora Linux, но не могу объяснить это. Я установил «verbose» на 15 и сравнил первый и второй прогоны - без разницы в логах. Может быть ошибка в Vim; может быть ошибка в функции, которую я просто не вижу.
garyjohn 13 лет назад
0
Хорошо, это должны быть мои настройки gVim. Я веду себя как «окна», что может объяснить поведение. В любом случае ваш ответ заставил меня попасть в справочники, и это хорошо.
drapkin11 13 лет назад
0
О сценариях: как только вы освоите его, он станет действительно аккуратным. В Vim я могу многое сделать с помощью нескольких нажатий клавиш. Это похоже на сценарии оболочки: выполнив одно и то же задание несколько раз, вы понимаете, что делаете все это за один шаг, и вам не нужно каждый раз набирать параметры и имена файлов, используя всего несколько строк сценария оболочки или Vim.
garyjohn 13 лет назад
0