У меня есть файл с кучей пользовательских настроек по умолчанию. Я хочу изменить часть текста, но я с трудом придумываю совпадения и заменители. Используя следующий пример:
###############################################################################
# Trackpad, mouse, keyboard, Bluetooth accessories, and input #
###############################################################################
# Trackpad: enable tap to click for this user and for the login screen
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
Я хотел бы заменить # Trackpad: ...
наrunning "Trackpad: ..."
Решив проблему, я нашел кое-что, используя тестер регулярных выражений:
/\n\n#\s(.*)/g
Если я попытаюсь использовать это в Vim, это не сработает для меня:
:/\n\n#\s(.*)/running "\1"/g
Я думаю, моя проблема сводится к двум конкретным вопросам:
- Как я могу избежать поиска
\n
символов, и вместо этого убедиться, что#
не появляется в конце группы поиска? - Как я могу эффективно использовать группы захвата?
Ниже приведены отличные ответы. Трудно выбрать между всеми тремя, однако я считаю, что выбранный ответ является наиболее точным для моей первоначальной спецификации. Я рекомендую вам попробовать все три ответа с настоящим файлом, чтобы увидеть, как вы к ним относитесь.
:%s/\v\n\n#\s+(.*)/^M^Mrunning "\1"/
(добавили «волшебный» флаг). Действительно трудно выбрать правильный ответ для моего первоначального вопроса, но я чувствую, что этот ответ наиболее близок к моему первоначальному ожидаемому ответу. Это также единственный файл, который работает по всему файлу без необходимости выбора диапазона.