Я хочу найти, что количество раз 'x' присутствует в моем файле, таким образом, я отправляю %s/x//gn
и получите корректный ответ.
Как я могу получить результирующее количество в переменную с помощью vimscript на командной строке?
На следующее решение намекнул ответ ниже:
:let cnt=0
:g/x/let cnt=cnt+1
:echo cnt
Однако cnt
сделан сохранить общее количество строк в буфере, которые имеют x
, не, сколько x
s существуют в целом файле.
Так, исходный вопрос все еще стоит.
Следующее добивается цели:
:echo eval(join(map(range(1, line('$')), 'len(substitute(getline(v:val),"[^x]","","g"))')," + "))
Это заменяет все не -x
символы ни с чем, рассчитывает, количество оставшихся символов (должен быть x
s), и складывает этот результат для каждой строки в файле.
Я получил идею для этой техники с помощью map
функция от Dennis Williamson, в другом сообщении на сценариях Vim.
Этому отвечает Vim на FAQ, "Как проводят меня подсчет количество раз, конкретное слово происходит в буфере?"
Можно попробовать это
:let cnt=0
:g/^.*may/let cnt=cnt+1
:echo cnt
Таким образом, Вы будете затем видеть, сколько строк имеет слово 'май' в них, по крайней мере, однажды. Таким образом, следующий текст будет считаться как 1:
Your mileage may vary. You may have already won.
Легкий.