2013-08-02 2 views
1

Я хочу подсчитать количество вхождений строки под курсором. Я намерен сделать это с помощьюКак указать строку под курсором в Vim?

:%s/pattern/&/gn 

команда. Итак, как мне указать строку под курсором вместо pattern?

+1

Я обычно делаю '% w! Sort | уникальный -dc | less' или '%! sort | unique -c' и undo – sehe

ответ

3

Вы можете вставить текущую строку через регистр выражения . Для буквального матча, включите регулярное выражение очень nomagic режим (\V), и избежать каких-либо обратной косой черты и разделитель в строке:

:%s/\V<C-r>=escape(getline('.'), '/\')<CR>/&/gn 

В зависимости от того, что вы хотите посчитать точно, вам может понадобиться на якорь (\^...\$ в очень номическом режиме).

Вместо прямой установки через <C-r> вы также можете построить команду через :execute. Это больше подходит для функции.

:execute '%s/\V' . escape(getline('.'), '/\') . '/&/gn' 
+1

Среднее значение для _yank_ текущей строки (' Y' или 'yy') и использовать ее как':% s/\ V ", в которой в случае, если вы будете использовать бдительность, чтобы обнаружить любые опасные символы эвакуации. Это намного быстрее для одноразовых игр, хотя – sehe

+0

Я согласен с этим. Как эти решения проще, чем yanking, а затем указав регистр с помощью '" '? –

+0

Я бы не набирал их повторно. Если бы я нуждался в этом чаще, я бы, естественно, создал для него сопоставление или команду. Вы не сказали нам, что вы используете это для ... –

0

Если вы ищете консервированные плагин решения, мой SearchPosition plugin может рассчитывать вхождения. С его помощью V<A-m> покажет сводку следующим образом:

On sole match in this line, 8 following, 2 in previous lines; total 10 for /this line\n/ 
Смежные вопросы