ฉันรู้ว่ามันเป็นคำถามเก่าและวิธีของ @mykola-golubyev เห็นได้ชัดว่าเป็นคำตอบที่ดีที่สุดสำหรับบางกรณีในคำถาม OP (ซึ่งฉันคิดว่ากำลังใช้รหัสที่สับสนซึ่งคุณน่าจะมีหลายบล็อกที่มีชื่อตัวแปรเดียวกัน) ; แต่ด้วยชื่อคำถามที่หลาย ๆ คนมาที่นี่จากการค้นหาของ Google อาจมองหาวิธีการเปลี่ยนชื่อตัวแปรใน VIM ที่เจาะจงสถานการณ์น้อยลง
ฉันประหลาดใจไม่มีใครแนะนำวิธีนี้:
*
:s//
NEWNAME /gc
*
เป็นเช่นเดียวกับgn
- มันค้นหาสำหรับเกิดขึ้นต่อไปของคำภายใต้เคอร์เซอร์และจะกลายเป็นที่ผ่านมารูปแบบการสืบค้นดังนั้นเมื่อคุณไม่ใช้รูปแบบการค้นหาในคำสั่งแทน, VIM ถือว่านี่เป็นรูปแบบในการค้นหา
สำหรับสำเนา var จำนวนน้อยชุดที่เร็วกว่า:
*
cw
NEWNAME <esc>
แล้วทำซ้ำn.
สำหรับเหตุการณ์อื่น ๆ
ค้นหาสำหรับการเกิดขึ้น, cw
เป็นคำสั่งสำหรับคำว่าการเปลี่ยนแปลง , n
ไปที่เกิดขึ้นต่อไปของการที่ผ่านมาการค้นหาคำและ.
ทำซ้ำคำสั่งสุดท้าย (ซึ่งก็คือการเปลี่ยนแปลงคำ NEWNAME )
(เครดิตสำหรับฉันที่รู้ทั้งหมดนี้ไปที่@doomedbunnies บน Reddit )
เคล็ดลับเด็ดอีกอย่างคือ: ( เครดิตถึง @ nobe4 )
*
cgn
NEWNAME <esc>
แล้วทำซ้ำ.
สำหรับเหตุการณ์อื่น ๆ
cgn
คือ "เปลี่ยนแปลงสิ่งที่เป็นผลของ (ค้นหาเหตุการณ์ถัดไป)" ตอนนี้ที่นี่เป็นคำสั่งสุดท้ายที่คุณไม่จำเป็นต้องn
ที่จะไปเกิดขึ้นต่อไปจังหวะเพื่อให้น้อยลงอีกครั้งและที่สำคัญกว่านั้นไม่จำเป็นต้องสำรองและn
.
แต่เห็นได้ชัดว่าสิ่งนี้มีข้อเสียคือไม่มีทางข้ามเหตุการณ์ได้
นี่คือประโยชน์บางประการ:
- ไม่มีการแมปไม่มี. vimrc (หรือ init.vim) ดังนั้นคุณสามารถใช้มันในสำเนา VIM ใด ๆ ที่คุณเจอ (เช่นงานด่วนใน VPS หรือเครื่องของเพื่อนคุณซึ่งการกำหนดค่า VIM ในแบบของคุณจะทำให้จุดประสงค์ของ 'ด่วน' )
- การใช้
*
หรือgn
สำหรับการเลือกคำนั้นรวดเร็วมาก - การกดแป้นพิมพ์เพียงครั้งเดียว (สมมติว่า 1.5)
- ใช้
*
หรือgn
ทำให้แน่ใจว่าคุณไม่ได้ตรงกับคำอื่นเช่นเดียวกับที่:%s/<C-R>//gc
ทำ Beats พิมพ์:%s/\<OLDNAME\>/NEWNAME/gc
ด้วยมือ: โดยส่วนตัวแล้วฉันมักจะลืมใช้\<
สิ่งต่าง ๆ เพื่อ จำกัด การจับคู่ให้เป็นคำทั้งหมดเท่านั้น
- การไม่ใช้ขอบเขตจะส่งผล
n
ให้ข้ามการแข่งขันที่ไม่ต้องการเพียงไม่กี่จังหวะ- อาจน้อยกว่าจังหวะพิเศษที่จำเป็นในการ จำกัด ขอบเขตด้วยซ้ำ ภายใต้เงื่อนไขปกติตัวแปรของคุณมักจะถูกแปลเป็นบล็อกโค้ดบางอย่างอยู่แล้ว