J'ai un fichier avec un tas de valeurs par défaut de l'utilisateur. Je veux changer une partie du texte, mais j'ai du mal à trouver un matcher et un remplaçant. En utilisant l'exemple suivant:
###############################################################################
# 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
Je voudrais remplacer # Trackpad: ...
parrunning "Trackpad: ..."
En décomposant le problème, j'ai trouvé quelque chose en utilisant un testeur d'expressions régulières:
/\n\n#\s(.*)/g
Si j'essaie de l'utiliser dans Vim, cela ne fonctionne pas pour moi:
:/\n\n#\s(.*)/running "\1"/g
Je suppose que mon problème se résume à deux questions spécifiques:
- Comment puis-je éviter de rechercher des
\n
caractères et m'assurer à la place de#
ne pas apparaître à la fin du groupe de recherche? - Comment puis-je utiliser efficacement les groupes de capture?
Il y a quelques bonnes réponses ci-dessous. Difficile de choisir entre les trois, mais je pense que la réponse choisie est la plus précise pour ma spécification d'origine. Je vous recommande d'essayer les trois réponses avec le fichier réel pour voir ce que vous en pensez.
:%s/\v\n\n#\s+(.*)/^M^Mrunning "\1"/
(ajouté le drapeau "magique"). Il est vraiment difficile de choisir une réponse correcte pour ma question d'origine, mais je pense que cette réponse est la plus proche de ma réponse attendue d'origine. C'est aussi le seul qui fonctionne dans tout le fichier sans avoir besoin de sélectionner une plage.