Замініть візерунок на поточний номер рядка


16

Я хотів би замінити "x" у цьому файлі поточним номером рядка. Тобто зміни

x
x
x

до

1
2
3

Наразі я використовую одноколісний Perl:

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

Я думаю, що UltraEdit може це зробити за допомогою вертикального вибору та заміни. Чи можна це зробити in vim? (Мій приклад тут передбачає, що "x" - це все, що є в одному рядку. Але рядки в моєму реальному файлі набагато складніші.)

Відповіді:


24

Так, vim може це зробити! Виконайте глобальний пошук xта замініть його \=printf("%d", line('.'). Наприклад:

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

Ви також можете перейти xна інший пошук, якщо вам потрібно.

Пояснення:

Це замінює кожне виникнення x(або що ви шукаєте) реєстру оцінювання \=. Цей регістр оцінює код vimscript і повертає рядок. У цьому випадку код, що оцінюється, є "Друкувати рядок, на якому ми знаходимося як десяткове число"


9

Оскільки ви згадали вертикальний вибір та заміну, ви можете зробити це теж. Використовуйте CtrlVдля вибору блокування тексту, який ви хочете замінити, а потім cвведіть 0, щоб замінити його на 0. Потім виберіть ці 0:

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

Потім натисніть g<c-a>( g+ Ctrla):

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

Якщо ви замінили один стовпець, ви можете скористатися gvдля швидкого вибору тієї ж області.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.