Заменить шаблон текущим номером строки

15

Я хотел бы заменить 'x' в этом файле на номер текущей строки. То есть изменение

x
x
x

в

1
2
3

Сейчас я использую однострочник Perl:

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

Я думаю, что UltraEdit может сделать это с вертикальным выбором и заменой. Можно ли это сделать в vim? (Мой пример здесь предполагает, что 'x' - это все, что есть в одной строке. Но строки в моем реальном файле намного сложнее.)

yong321
источник

Ответы:

23

Да, Vim может сделать это! Выполните глобальный поиск xи замените его на \=printf("%d", line('.'). Например:

:%s/x/\=printf("%d", line('.'))

Вы также можете перейти xк другому поиску, если вам нужно.

Объяснение:

Это заменяет каждый случай x(или что вы ищете) с регистром оценки \=. Этот регистр оценивает код vimscript и возвращает строку. В этом случае оцениваемый код выглядит так: «Выведите строку, на которой мы находимся, как десятичное число»

DJMcMayhem
источник
9

Поскольку вы упомянули вертикальный выбор и замену, вы можете сделать это тоже. Используйте CtrlVдля выбора блокировки текста, который вы хотите заменить, затем cвведите 0, чтобы заменить его на 0. Затем выберите эти 0:

введите описание изображения здесь

Затем нажмите g<c-a>( g+ Ctrla):

введите описание изображения здесь

Если вы заменили один столбец, то вы можете использовать gvдля быстрого повторного выбора той же области.

Мур
источник