Mam plik z wieloma domyślnymi ustawieniami użytkownika. Chcę zmienić część tekstu, ale staram się wymyślić moduł dopasowujący i zamiennik. Korzystając z następującego przykładu:
###############################################################################
# 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
Chciałbym zamienić # Trackpad: ...
zrunning "Trackpad: ..."
Rozwiązując problem, wymyśliłem coś za pomocą testera wyrażeń regularnych:
/\n\n#\s(.*)/g
Jeśli spróbuję użyć tego w Vimie, to nie działa dla mnie:
:/\n\n#\s(.*)/running "\1"/g
Chyba mój problem sprowadza się do dwóch konkretnych pytań:
- Jak mogę uniknąć wyszukiwania
\n
znaków, a zamiast tego upewnić się,#
że nie pojawia się na końcu grupy wyszukiwania? - Jak mogę skutecznie korzystać z grup przechwytywania?
Poniżej znajduje się kilka świetnych odpowiedzi. Trudno wybrać między wszystkimi trzema, jednak uważam, że wybrana odpowiedź jest najdokładniejsza dla mojej oryginalnej specyfikacji. Zalecam wypróbowanie wszystkich trzech odpowiedzi z rzeczywistym plikiem, aby zobaczyć, co o nich myślisz.
:%s/\v\n\n#\s+(.*)/^M^Mrunning "\1"/
(dodał flagę „magia”). Naprawdę trudno jest wybrać prawidłową odpowiedź na moje pierwotne pytanie, ale czuję, że ta odpowiedź jest najbliższa mojej pierwotnej oczekiwanej odpowiedzi. Jest to również jedyny, który działa w całym pliku bez potrzeby wybierania zakresu.