ฉันรู้ว่ามันเป็นคำถามเก่าและวิธีของ @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ให้ข้ามการแข่งขันที่ไม่ต้องการเพียงไม่กี่จังหวะ- อาจน้อยกว่าจังหวะพิเศษที่จำเป็นในการ จำกัด ขอบเขตด้วยซ้ำ ภายใต้เงื่อนไขปกติตัวแปรของคุณมักจะถูกแปลเป็นบล็อกโค้ดบางอย่างอยู่แล้ว