ฉันมีไฟล์ที่มีค่าเริ่มต้นของผู้ใช้เป็นจำนวนมากฉันต้องการเปลี่ยนข้อความบางส่วน แต่ฉันกำลังต่อสู้กับผู้จับคู่และผู้แทนที่ ใช้ตัวอย่างต่อไปนี้:
###############################################################################
# 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: ..."
เมื่อหมดปัญหาฉันก็พบกับบางสิ่งที่ใช้เครื่องมือทดสอบ regex:
/\n\n#\s(.*)/g
ถ้าฉันลองและใช้สิ่งนี้เป็นกลุ่มมันไม่ได้ผลสำหรับฉัน:
:/\n\n#\s(.*)/running "\1"/g
ฉันเดาว่าปัญหาของฉันเดือดร้อนเหลือคำถามสองข้อ:
- ฉันจะหลีกเลี่ยงการค้นหา
\n
ตัวอักษรและให้แน่ใจว่า#
จะไม่ปรากฏในตอนท้ายของกลุ่มการค้นหา? - ฉันจะใช้กลุ่มการดักจับได้อย่างมีประสิทธิภาพได้อย่างไร
มีคำตอบที่ดีบางข้อด้านล่าง ยากที่จะเลือกระหว่างทั้งสาม แต่ฉันรู้สึกว่าคำตอบที่เลือกนั้นแม่นยำที่สุดสำหรับสเป็คดั้งเดิมของฉัน ฉันแนะนำให้คุณลองคำตอบทั้งสามด้วยไฟล์จริงเพื่อดูว่าคุณรู้สึกอย่างไรกับพวกเขา
:%s/\v\n\n#\s+(.*)/^M^Mrunning "\1"/
(เพิ่มธง "magic") เป็นการยากที่จะเลือกคำตอบที่ถูกต้องสำหรับคำถามดั้งเดิมของฉัน แต่ฉันรู้สึกว่าคำตอบนี้เป็นคำตอบที่คาดหวังดั้งเดิมที่สุดของฉัน นอกจากนี้ยังเป็นไฟล์เดียวที่ใช้ได้ตลอดทั้งไฟล์โดยไม่จำเป็นต้องเลือกช่วง