ฉันจะใช้ชุดการกดแป้นพิมพ์กับทุกคำที่เกิดขึ้นได้อย่างไร


13

หากฉันต้องการลบทุกคำนั่นเป็นเรื่องง่ายเพราะฉันจะทำสิ่งนี้:

:s%/WORD//g

แต่ถ้าฉันต้องการจะทำอะไรxyzกับ "WORD" ทุกครั้ง ตัวอย่างเช่นสมมติว่าฉันต้องการลบทุกบรรทัดที่มี "WORD" ฉันสามารถคิดถึงวิธีที่จะทำสิ่งนี้ได้สองสามอย่าง แต่ไม่มีวิธีใดที่เหมาะ

1)

/WORD

จากนั้นกดด้วยตนเองddnddnddnddn...จนกระทั่งไม่มีเหตุการณ์เกิดขึ้นอีก แต่นี่จะใช้เวลานานถ้ามีหลายบรรทัดในการทำเช่นนี้

2)

qd/WORD<enter>ddq

และจากนั้นคาดเดาว่ามีคำกี่คำที่เกิดขึ้นจากนั้นเช่น:

500@d 

แต่สิ่งนี้จะทำให้ A) พลาดเส้นหนึ่งหรือ B) ลบเส้นพิเศษออก

มีวิธีที่ดีกว่าในการทำเช่นนี้?


3
เพียงแค่คุณรู้500@dตามที่คุณอธิบายนั้นปลอดภัยจริง ๆ การเล่นมาโครจะหยุดทำงานเมื่อไม่พบคำค้นหา ดังนั้นคุณจะเห็นข้อผิดพลาด "ไม่พบรูปแบบ: คำว่า" หลังจากลบบรรทัดทั้งหมดที่มีอยู่แล้ว
Wildcard

@ Wildcard ขอบคุณที่รู้ดีจริงๆ!
James

คำตอบ:


17

คุณสามารถใช้:globalและ:normalคำสั่งสำหรับสิ่งนี้ :globalคำสั่งมีไวยากรณ์ต่อไปนี้:

:global/{pattern}/{command}

สิ่งนี้จะเรียกใช้ "คำสั่ง" ในทุก ๆ "รูปแบบ" จากนั้นคุณสามารถใช้คำสั่งเพื่อเรียกใช้ชุดของการกดแป้นพิมพ์ในการเกิดขึ้นของคำแต่ละใช้:normal :globalชอบมาก

:g/WORD/normal {keystrokes}

หากการกดแป้นเหล่านั้นเกี่ยวข้องกับคีย์พิเศษเช่น<Ctrl>คุณสามารถรวมกับ:executeคำสั่งดังนี้:

:g/WORD/exe "normal {keystrokes}"

โปรดทราบว่าคุณต้องใส่แบ็กสแลชก่อนการคีย์พิเศษแต่ละครั้ง

สำหรับข้อมูลเพิ่มเติมเกี่ยวคำสั่งเหล่านี้ให้ดูและ:help :normal:help :global


เอาชนะฉันไป ฉันเดาว่าฉันพิมพ์ช้าเกินไป :)
Wildcard

3

เพื่อความสมบูรณ์คุณสามารถ ใช้:substituteถ้าคุณจับคู่ - ในตัวอย่างของคุณ (ลบทั้งบรรทัดที่มี WORD) - ทั้งบรรทัดที่มี WORD เช่น:

:%s/^.*\<WORD\>.*\n

สิ่งนี้มี "แทนที่การแข่งขันด้วยสิ่งใด" โดยปริยายนั่นคือรูปแบบที่สั้นกว่าของ:

:%s/^.*\<WORD\>.*\n//

บวกกับ\zs, \ze, \(- \)(การจัดกลุ่ม) และ\=(ส่วนหนึ่งเปลี่ยน) ด้วยsubmatch(), :substituteสามารถที่มีประสิทธิภาพมาก


2

:globalดูเหมือนว่าคุณกำลังมองหา

:g/WORD/d_

ขีดล่างทำหน้าที่อะไร?
Wildcard

ใช้งานได้ แต่ไม่มีคำสั่งใดที่ฉันรู้ว่าทำงาน ฉันได้รับ "ไม่ใช่คำสั่งแก้ไข"
James

1
@ Wildcard: ขีดล่างจะเป็นการตัดสิ่งที่กำลังถูกตัดออก คำสั่งดำเนินการที่เป็นจริงและไม่ทำงานในโหมดปกติ:delete d
Luc Hermitte

@DJMcMayhem: สำหรับการดำเนินการอื่น ๆ :normalตามปกติคุณจะต้อง และหากคุณต้องการคีย์พิเศษคุณอาจต้อง:exe-> `exe" ปกติ aFooFar \ <esc> "
Luc Hermitte
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.