У меня есть следующий абзац:
1 sometexthere
2 indented text
3 indented text
4 indented text
Я хотел бы использовать команду поиска и замены vim, чтобы добавить текст прямо перед текстом с отступом. Например:
1 sometexthere
2 test: indented text
3 test: indented text
4 test: indented text
Есть ли способ использовать синтаксис поиска и замены vim для достижения следующих результатов? Я пробовал такие команды, как
2,4s/^/test: /
но до сих пор не могу найти способ удалить пробелы.
Если я неправильно понимаю ваш вопрос, вы можете добиться этого довольно просто, например:
%s/ /\ test:/g
Это дает желаемый результат от данного ввода. Однако для этого я предпочитаю использовать макрос.
qq # Begin recording the macro
/____ # Search for four spaces
4li # Insert four characters to the right
test: # Type the desired text
<ESC>q # Exit insert mode and save the macro to the q register
Затем, чтобы запустить этот макрос на следующем отступе, нажмите @q
. Просто повторяйте @q
или @@
, чтобы продолжать выполнять макрос, пока все не станет отступом.
Другой альтернативный маршрут, который довольно удобочитаем, — использовать обычную команду.
/____ # Search for the indent.
:'<,'> normal 0nitest: # Inserts "test:" 4 characters right of the search result. you can replace the <,> with a range of course.
Соответствие ведущему пробелу и замена его самим собой:
%s/^\s\+/&test: /
Или сопоставьте строки с помощью :global
и отредактируйте их с помощью :normal
g/^\s/normal! Itest:
Это именно то, что я ищу. Спасибо