บางครั้งฉันใช้:s
กับ regexp ที่ซับซ้อนซึ่งอาจหรืออาจไม่ถูกต้องหรือไม่แน่ใจว่าฉันต้องการแทนที่การแข่งขันทั้งหมดหรือไม่
มีวิธีใดบ้างที่ฉันสามารถบอกให้ Vim ยืนยันการแข่งขันทุกครั้งที่พบก่อนที่จะแทนที่ข้อความจริงหรือไม่
บางครั้งฉันใช้:s
กับ regexp ที่ซับซ้อนซึ่งอาจหรืออาจไม่ถูกต้องหรือไม่แน่ใจว่าฉันต้องการแทนที่การแข่งขันทั้งหมดหรือไม่
มีวิธีใดบ้างที่ฉันสามารถบอกให้ Vim ยืนยันการแข่งขันทุกครั้งที่พบก่อนที่จะแทนที่ข้อความจริงหรือไม่
คำตอบ:
ใช่ ใช้ธงc
:substitute
จาก:help substitute
:
[c] Confirm each substitution. Vim highlights the matching string (with
hl-IncSearch). You can type: :s_c
'y' to substitute this match
'l' to substitute this match and then quit ("last")
'n' to skip this match
<Esc> to quit substituting
'a' to substitute this and all remaining matches {not in Vi}
'q' to quit substituting {not in Vi}
CTRL-E to scroll the screen up {not in Vi, not available when
compiled without the +insert_expand feature}
CTRL-Y to scroll the screen down {not in Vi, not available when
compiled without the +insert_expand feature}
ตัวอย่างการใช้งานง่ายเหมือนพาย:
%s/old/new/c
สิ่งนี้มีประโยชน์มาก แต่ไม่รู้เกี่ยวกับสิ่งนี้จนถึง 2 สัปดาห์ที่ผ่านมา :-) และยังมีให้บริการใน ol 'vi :-)
เคล็ดลับโบนัส: คุณอาจต้องการใช้:set nowrapscan
; สิ่งนี้จะป้องกันไม่ให้ Vim ห่อขึ้นไปด้านบนเมื่อกระทบกับด้านล่าง ฉันพบว่าสิ่งนี้มีประโยชน์อย่างยิ่งเมื่อใช้c
แฟล็ก
นอกจากสิ่งที่ Carpetsmoker พูดไว้:
การตั้งค่า&incsearch
( set incsearch
) ใน Vim มีประโยชน์จริง ๆ คุณสามารถใช้มันพร้อมกับเคล็ดลับที่มีประโยชน์และเป็นที่รู้จักน้อย
เคล็ดลับคือการลองใช้ regex ที่ซับซ้อนของคุณเพียงแค่ใช้คำสั่ง/
หรือ ?
เป็นกลุ่มจะใช้การ&incsearch
ตั้งค่าเพื่อแสดงการแข่งขันแบบโต้ตอบ เมื่อคุณพอใจกับ regex แล้วคุณสามารถใช้:%s//replacement
เพื่อให้ vim ใช้การค้นหาก่อนหน้า
สังเกตว่าส่วนใน//
นั้นว่างเปล่า (นั่นคือที่ที่คุณใส่ข้อความเพื่อค้นหา) หากคุณเว้นว่างไว้คุณกำลังบอกให้ Vim ใช้ regex การค้นหาก่อนหน้า ด้วยสิ่งนี้คุณสามารถพิมพ์ regex ที่ซับซ้อนด้วย/
และมีประโยชน์ทั้งหมดset incsearch
จากนั้นใช้%s//replacement
คำสั่งเพื่อดำเนินการค้นหาและแทนที่จริง ๆ
หากคุณต้องการสิ่งที่คล้ายกับ incsearch สำหรับ:s
คำสั่งลองใช้vim-overแต่ฉันชอบใช้วิธี Vim ดั้งเดิม
เปลี่ยนตัวโต้ตอบโปรดของฉันคือการค้นหาโดยใช้และผ่านการแข่งขันโดยใช้/n
จากนั้นเลือกจับคู่ใช้gnแล้วsเพื่อใช้แทนข้อความที่มีสิ่งที่ผมชอบ
และทำซ้ำโดยเลื่อนไปยังแมตช์ถัดไปและกด.
:s/old/new/gc
)
ใน Neovim ยังมี'inccommand'
ตัวเลือกที่ให้คุณดูตัวอย่างผลลัพธ์ของ:s
คำสั่งในขณะที่คุณพิมพ์
เพื่อประโยชน์ของทุกคนincsearch
ได้รับการอัพเดตใน vim8 เพื่อแสดงตัวอย่างเมื่อคุณพิมพ์รูปแบบ
:%s/pattern/replace/
แล้วกดu
เพื่อเลิกทำคุณจะเห็นชิ้นส่วนที่ Vim เปลี่ยนหากคุณhlsearch
เปิดใช้งาน^R
และคุณสามารถแทนที่ข้อความนี้อีกครั้งกับ