This is answered by the Vim FAQ "How do I count the number of times a particular word occurs in a buffer?"
Как зафиксировать результат команды на регулярном выражении в обычном режиме Vim?
Я хочу узнать, сколько раз «х» присутствует в моем файле, поэтому я отправляю %s/x//gn
и получаю правильный ответ.
Как я могу записать результирующий счетчик в переменную, используя vimscript в командной строке?
На следующее решение намекнул ответ ниже:
:let cnt=0 :g/x/let cnt=cnt+1 :echo cnt
Тем не менее, cnt
это сделано для хранения общего количества строк в буфере, которые имеют x
, а не сколько x
s во всем файле.
Итак, первоначальный вопрос остается в силе.
3 ответа на вопрос
You can try this
:let cnt=0 :g/^.*may/let cnt=cnt+1 :echo cnt
So you will then see how many lines have the word 'may' in them at least once. So the following text will be counted as 1:
Your mileage may vary. You may have already won.
Easy.
The following does the trick:
:echo eval(join(map(range(1, line('$')), 'len(substitute(getline(v:val),"[^x]","","g"))')," + "))
This replaces all non-x
characters with nothing, counts the number of remaining characters (should be x
s), and adds up this result for each line in the file.
I got the idea for this technique using the map
function from Dennis Williamson, in another post on Vim scripting.
Похожие вопросы
-
3
Как я могу "инвертировать" структуру каталогов?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
7
Запустить синергетический клиент при загрузке в Mac OS X
-
-
13
Какие функции Vim вы используете?
-
4
Как синхронизировать скрипты GreaseMonkey между компьютерами?
-
8
Удалить расширенную "вкладку" в Vim одним нажатием клавиши?
-
14
Regex инструмент для Linux
-
1
Могу ли я написать скрипт, который будет автоматически переключать пользователей?
-
6
Хорошее руководство по PowerShell, начало работы с более продвинутым использованием
-
1
Невозможно понять, где зачем требовать обнаружения ASCII и HEX в строке состояния Vim