คุณนำการเลือกโหมดภาพกลับมาใช้ใหม่ได้อย่างไร


164

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


ฉันพบทางเดียว แต่มันค่อนข้างยุ่งยาก:: '<,'> s / เก่า / ใหม่ / g วิธีใดที่จะทำสิ่งนี้โดยที่ไม่ต้องพิมพ์ใน '<,'>?
เขาวงกต

คำตอบ:


244

คุณอาจจะ gvre-เลือกพื้นที่ภาพสุดท้ายเลือกด้วย


4
น่ากลัว! @Heptite วิธีการค้นหาคำสั่งนี้ด้วยตัวเองโดยไม่ต้อง Stackoverflow?
skywinder

6
@skywinder: help gv
Heptite

4
@Heptite: ฉันไม่แน่ใจว่าคุณเป็นคนที่แก้มแก้มที่นี่ แต่คำสั่งนั้นแสดงให้คุณเห็นว่า: gv ทำอะไรเมื่อคุณรู้เกี่ยวกับมัน แต่ถ้าฉันทำไม่ได้ล่ะ สอนชายคนหนึ่งให้ตกปลาและทุกสิ่ง
Ben Thul

@ BenThul: ฉันคิดว่าฉันเข้าใจผิดคำถาม ฉันรู้เกี่ยวกับฟีเจอร์ต่าง ๆ ของ Vim เพียงแค่อ่านเอกสารจำนวนมากเมื่อเวลาผ่านไปโดยเริ่มจาก " :help"
Heptite

2
:help select-visualควรนำคุณไปสู่คู่มือที่ถูกต้องภายใน vim @skywinder

14

gv เป็นวิธีที่เร็วที่สุด (ใช้การเลือกล่าสุด) แต่หากคุณต้องการพื้นที่การเลือกที่บันทึกไว้อย่างมั่นคง (หรือหลายรายการ) คุณสามารถสร้างมาโครได้ตลอดเวลา

ให้บอกว่าฉันต้องการเก็บวิธีการเลือกปัจจุบันของฉันซึ่งไปจากบรรทัด 25-35 ฉันสามารถสร้างมาโครที่เลือกวิธีการทั้งหมดโดยการพิมพ์

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

จากนั้นฉันจะได้การเลือกนั้นกลับมาโดยพิมพ์@a(เรียกใช้แมโครในการลงทะเบียนก) ทำซ้ำกับการลงทะเบียนบรรทัดหรือส่วนใด ๆ ของบรรทัดที่คุณต้องการ เห็นได้ชัดว่าหากคุณทำการเปลี่ยนแปลงไฟล์การเลือกอาจเปลี่ยนแปลงเช่นกันดังนั้นคุณอาจต้องการพิจารณาใช้เครื่องหมายแทนหมายเลขบรรทัด "hardcoding"


zm เพื่อป้อนว่าคุณจำเป็นต้องรู้หมายเลขบรรทัด ฉันคิดว่าดีกว่าที่จะกำหนดสองเครื่องหมายและจากนั้นใช้: 'a' b เพื่อดำเนินการในช่วงระหว่างพวกเขา (หรือแทนที่ 'กับ backticks หากต้องการเมล็ดภายในบรรทัด)
sillyMunky

ใช่สิ่งที่หมายเลขบรรทัดเป็นใบ้ - ฉันเพิ่งใช้มันเป็นตัวอย่างสำหรับวิธีการสร้างมาโครการเลือก การใช้เครื่องหมายต่าง ๆ เป็นความคิดที่น่าสนใจ ...
AlexMA

6

gvใช้งานได้ดีสำหรับการกู้คืนตัวเลือกสุดท้าย แต่บางครั้งก็ต้องการอีกเล็กน้อย

หากคุณต้องการบันทึกแบบถาวรมากขึ้นลองดูปลั๊กอินนี้ที่เรากำลังทำงานบน GitHub

VisualMarksmช่วยให้คุณสามารถบันทึกและเรียกคืนพื้นที่ที่เลือกทางสายตาเช่นเดียวกับคุณบันทึกและทำเครื่องหมายสถานที่เฉพาะในไฟล์ของคุณด้วย หลังจากติดตั้งและด้วยตัวเลือกเริ่มต้นให้ใช้:

ma

ในโหมดภาพเพื่อบันทึกการเลือกปัจจุบันของคุณเพื่อทำเครื่องหมายaแล้ว

<a

ในโหมดปกติเพื่อกลับสู่การเลือกนี้


ว้าวฟังดูเจ๋งจริงๆ ฉันจะต้องลองใช้ปลั๊กอินนั้น! VisualMarks เหล่านี้จะยังคงอยู่กับ mkview เช่นเดียวกับที่คุณสามารถทำได้ด้วยคะแนนหรือไม่
เขาวงกต

@labyrinth ฉันไม่รู้ mkviewแต่ .. ฉันเดาว่าใช่เพราะมีการบันทึกเครื่องหมายในไฟล์แยกต่างหากและ .. ฉันขอแนะนำให้คุณลองต่อไป :) หากพวกเขาไม่ยืนยันอย่างที่คุณต้องการเรายินดีที่จะรับคุณสมบัติของคุณ ร้องขอGitHubและลองประมวลผล
iago-lito

1

สมมติว่าฉันต้องการแทนที่ Goodbye ด้วย Hello และเลือกรหัสด้านล่าง:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

ฉันจะพิมพ์:s/Goodbye/Hello/และเป็นกลุ่มจะแทนที่ทุกกรณีGoodbyeด้วยHello

มันเป็นเพียงการรวมกันของการแสดงออกปกติของกลุ่มและการเลือกโหมดภาพ เมื่อคุณเลือกมันควรป้อนอัตโนมัติ'<,'>


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

1
หลังจากแทนที่คุณจะออกจากโหมดภาพ พิมพ์gvและโหมดภาพของคุณจะเปลี่ยนกลับไปเป็นสถานะการเลือกก่อนหน้า
Scott Nguyen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.