2009-04-03 3 views
87

Я хочу найти строку и найти количество вхождений в файле с помощью редактора vi.Найти строку и получить счетчик в редакторе vi

+2

Выбранный ответ (': g/xxxx/d') ужасен, опасен и уступает другим на этой странице. Отмените выбор. –

+0

Я согласен, и он говорит только о том, что «строки удалены», а не «случаи удалены» – user1709076

ответ

15
:g/xxxx/d 

Это удалит все строки с рисунком и сообщит, сколько их удалено. Отмените, чтобы вернуть их после.

+4

Конечно, он может просто опустить «d», чтобы он не выполнял операцию. – Rook

+13

Обратите внимание, что это говорит только о том, сколько строк - не сколько случаев. Я думаю, что дирк является лучшим решением. – 2009-04-03 21:06:46

+4

Мое решение ниже правильно подсчитывает множественные вхождения внутри строка и нечего отменить. –

37

:% s/строка/строка/g даст ответ.

+0

Какой лучший ответ. +5, если возможно – ojblass

+0

Я думаю, что это сработало бы только тогда, когда в шаблоне не используется '. *' –

+9

Не нужно повторять строку, просто выполните '% s/string // ng'. – slm

119

Вам нужен флаг n. Для подсчета слов используйте:

:%s/\i\+/&/gn 

и конкретное слово:

:%s/the/&/gn   

См count-items документации раздел.

Если вы просто ввести:

%s/pattern/pattern/g 

то строка состояния будет давать вам количество матчей в VI, а также.

+0

Похоже, что этот ответ предназначен для пользователей Vim, а не для Vi :( – kadeshpa

+0

У вас есть только vi в вашей системе? Какая версия? – dirkgently

+0

Кто-то отметил ваш quesiton с помощью vim в нем ... Я удалил его. – ojblass

137

Путь

:% S/шаблон // дп

+6

+1 для l и печатать на машинке. – Leafy

+0

Это самый достоверный ответ без использования трюка over-kill. – user1412066

2

использование

:% s/шаблон/\ 0/г

, когда Строка шаблона слишком длинный, и вам не нравится вводить его снова.

17

(подобно тому, как Густаво сказал, но дополнительно:)

Для любого ранее поиска, вы можете сделать просто:

:%s///gn 

Шаблон не нужен, потому что уже в поиске -регистр (@/).

«%» - делать s/ во всем файле
«г» - поиск глобальных (с несколькими хитами в одной строке)
«п» - предотвращает любой замена s/ - ничего не удалено! ничего не должно быть отменено!
(см :help s_flag для получения дополнительной информации)

(Таким образом, он отлично работает с "Искать визуально выделенного текста", как описано в vim-wikia tip171)

0

Я предлагаю делать:

  1. Найдите либо *, чтобы сделать «ограниченный поиск» для того, что находится под курсором, либо выполнить стандартный поиск /pattern.
  2. Используйте :%s///gn, чтобы получить количество вхождений.Или вы можете использовать :%s///n, чтобы получить количество строк с вхождениями.

** Я действительно с я мог бы найти плагин, который дает сообщения о «матче N из N на N линию» с каждым поиском, но увы.

Примечание: Не путайте сложную формулировку вывода. Бывшая команда может дать вам что-то вроде 4 matches on 3 lines, где последний может дать вам 3 matches on 3 lines. В то время как технически точный, последний вводит в заблуждение и должен сказать «соответствие 3 линиям». Итак, как вы можете видеть, никогда не нужно использовать последнюю форму (только «n»). Вы получаете ту же информацию, более четко и более, используя форму «gn».

Смежные вопросы