มีคำสั่งใน Vim / Vi ให้ย้ายเคอร์เซอร์ไปที่จุดสิ้นสุดของไฮไลต์การค้นหาหรือไม่


86

มีคำสั่งใด ๆ ใน Vim / Vi เพื่อย้ายภายในกลุ่มการค้นหาที่เลือกหรือไม่

ตัวอย่างเช่นหากฉันค้นหาคำมีคำสั่งใดบ้างที่จะทำให้เคอร์เซอร์เคลื่อนที่ไปยังจุดสิ้นสุดของส่วนที่ไฮไลต์ สมมติว่าฉันมีคำว่า "FishTaco" และฉันต้องการค้นหา "Fish" ทุกอินสแตนซ์และแทรกบางอย่างตามหลัง ฉันรู้ว่าฉันสามารถทำการแทนที่แบบโกลบอลได้ แต่ถ้าฉันต้องการทำการเปลี่ยนแปลงในอินสแตนซ์ที่ไม่ใช่ลำดับสองตัวเท่านั้นล่ะ

ฉันเห็นว่าที่ไหนสะดวกที่จะสามารถเลื่อนเคอร์เซอร์ไปยังจุดสิ้นสุดของส่วนที่ไฮไลต์ปัจจุบันเพื่อดำเนินการได้


3
นี้ไม่ได้เป็นคำตอบสำหรับคำถาม แต่เพื่อให้บรรลุเป้าหมายสูงสุดของคุณของการแทนที่ทั้งหมดFishกับFishTacoคุณสามารถทำ:%s/Fish\(Taco\)\@!/&Taco/ซึ่งจะได้พบกับทุกคนFishไม่ได้ปฏิบัติตามแล้วโดยและแทนที่ด้วยTaco FishTacoรวมการค้นหาลบ lookahead Tacoกับแทนที่ที่มีระยะการจับคู่ตามด้วย
Jim Stewart

@JimStewart ฉันไม่รู้ว่าทำไมความคิดเห็นนี้ไม่มีอย่างน้อยก็ +1 มากเท่ากับคำตอบ นี่คือกลุ่มระดับนินจา
Still.Tony

คำตอบ:


135

คุณสามารถทำได้ด้วยสิ่งนี้:

/Fish/e

/eที่สิ้นสุดที่ดินเคอร์เซอร์ของคุณในตอนท้ายของภูมิภาคค้นหา (แทนตัวอักษรตัวแรกไปโดยปริยาย


32
โปรดทราบว่าคุณสามารถเพิ่ม+ nหรือ-nเพื่อวางเคอร์เซอร์nอักขระก่อนหรือหลังสิ้นสุด
Nathan Fellman

10
เป็นที่น่าสังเกตว่าหลังจากที่คุณ/Fishทำการค้นหาเรียบร้อยแล้วคุณสามารถข้ามไปที่จุดสิ้นสุดด้วย//eและจาก Vim 7.4 คุณสามารถใช้gnเพื่อเน้นภาพที่เห็นได้
smathy

ดูคำตอบ@ghbarrattด้วยตัวเลือกเพิ่มเติมในการค้นหาเคอร์เซอร์ในการจับคู่ที่ไฮไลต์
Nima

82

หากคุณต้องการวางเคอร์เซอร์ไว้หลังอักขระสุดท้ายของ Fish คุณสามารถใช้

/Fish/e+1

ซึ่งจะวางเคอร์เซอร์ไว้หลัง h (หากไม่มี+1เคอร์เซอร์จะสิ้นสุดที่ด้านซ้ายของอักขระสุดท้าย)

หากคุณสนใจเป็นพิเศษในการวางเคอร์เซอร์ไว้หลัง Fish แต่เมื่อปรากฏใน "FishTaco" คุณสามารถลองใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้

คุณสามารถใช้ได้

/FishTaco/s+4

และเคอร์เซอร์ของคุณจะลงเอยระหว่าง Fish และ Taco /s+4วางเคอร์เซอร์ 4 ตำแหน่งหลังจากที่เริ่มต้นของระยะการค้นหา

คุณสามารถใช้

/FishTaco/e-3

ซึ่งจะวางเคอร์เซอร์ของคุณ 3 ตำแหน่งทางซ้ายของด้านซ้ายของอักขระสุดท้าย (สิ้นสุด)

คุณยังสามารถใช้

/FishTaco/b+4 

เพราะจะถือว่าเป็น/b+4/s+4


14
คำอธิบายดีมาก แต่ตอนนี้ฉันแค่หิว
kenny

28

หากคุณค้นหาแล้ว/Fishคุณสามารถเปลี่ยนการค้นหาได้อย่างรวดเร็วเพื่อไปยังจุดสิ้นสุดของการแข่งขันโดย//eจะทำการค้นหาครั้งสุดท้ายซ้ำ แต่จะเพิ่มeตัวปรับแต่งที่ได้อธิบายไปแล้ว


1
// e + number คือสิ่งที่ฉันกำลังมองหา! น่ากลัว
arkod


12

เมื่อคุณเลือกภาพได้แล้วคุณสามารถใช้oเพื่อสลับตำแหน่งเคอร์เซอร์ระหว่างจุดเริ่มต้นและจุดสิ้นสุดของบล็อกที่เลือก เมื่อการเลือกเป็นเส้นตรงสิ่งนี้จะสลับตำแหน่งบรรทัดหมายความว่าเคอร์เซอร์จะเลื่อนไปที่บรรทัดเริ่มต้นและสิ้นสุดของการเลือก แต่ไม่ใช่อักขระเริ่มต้นหรือสิ้นสุด เมื่อการเลือกเป็นลักษณะที่ชาญฉลาดการเคลื่อนไหวก็เป็นไปตามลักษณะเช่นกัน

คุณยังสามารถใช้`<และ`>เพื่อสลับเคอร์เซอร์ระหว่างจุดเริ่มต้นและจุดสิ้นสุดของบล็อกภาพได้ แต่จะมีผลต่อการเลือกนั้นเองดังนั้นจึงใช้เพื่อรีเซ็ตหรือปรับขอบเขตการเลือก

แก้ไข: อ๊ะ แต่สำหรับไฮไลต์การค้นหาจะใช้ไม่ได้เพราะoจะเริ่มการแทรกบรรทัด ฉันเดาว่าไฮไลต์การค้นหาไม่เหมือนกับการเลือกภาพขออภัย :)


ฉันไม่รู้เหมือนกัน นี่เป็นวิธีที่ดีในการแก้ไขจุดเริ่มต้นของการเลือกโดยไม่ต้องเริ่มต้นใหม่ (เช่นคุณเริ่มการเลือกหนึ่งคำเร็วเกินไปหรือช้าเกินไป)
Timothée Boucher

9

ส่วน "เคอร์เซอร์เมื่อสิ้นสุดการแข่งขัน" ของคำถามของคุณได้รับคำตอบแล้ว

:%s/Fish/FishTaco/cคุณสามารถทำได้ วิธีนี้เปิดโอกาสให้คุณยืนยันหรือปฏิเสธการเปลี่ยนตัวทั้งหมดและข้ามธุรกิจ "เคอร์เซอร์ทั้งหมดเมื่อสิ้นสุดการจับคู่"


เคล็ดลับที่ยอดเยี่ยม หากฉันป้อน 'y' มันจะทำการแทนที่ในครั้งแรกเท่านั้น ฉันจะยืนยันได้อย่างไรสำหรับแต่ละรายการ
Jordan Parmer

1
ไปที่การแข่งขันถัดไปและรอให้คุณพิมพ์yหรือnอื่น ๆ จนกว่าจะไม่มีรายการที่ตรงกันเหลืออยู่ ที่จะยอมรับทุกแทนอีกชนิดที่จะปฏิเสธพวกเขาชนิดa q
romainl

1
อันที่จริงฉันพลาดgหลังจากรอบชิงชนะเลิศ/ดังนั้นมันจึงไม่ดำเนินต่อไปในสายของฉัน ขอบคุณสำหรับทิป.
Jordan Parmer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.