VIM: เป็นไปได้หรือไม่ที่จะเพิ่มพฤติกรรมที่กำหนดเองเมื่อใช้ / c ด้วยคำสั่ง replace?


2

มีบางกรณีที่สะดวกในการค้นหาและแทนที่พฤติกรรมสำหรับบางสิ่ง ตัวอย่างเช่นฉันมีการแมปต่อไปนี้ใน vimrc ของฉัน:

nnoremap n nzzzv

ซึ่งจัดกึ่งกลางหน้าจอไว้ทุกครั้งที่คุณเลื่อนไปยังนัดต่อไป สิ่งนี้ใช้ได้ดี แต่ใช้ไม่ได้เมื่อทำคำสั่ง% s // c มีวิธีการเชื่อมต่อหรือไม่เมื่อผู้ใช้เลือกหนึ่งในตัวเลือกการยืนยัน y / n / q / q / l / etc เพื่อให้คุณสามารถเรียกใช้คำสั่ง?

คำตอบ:


2

วิธีแก้ปัญหาสำหรับกรณีการใช้งานเฉพาะของคุณซึ่งอยู่ตรงกลางบรรทัดที่ถูกแทนที่ในปัจจุบันคือการ

:set scrolloff=999

ก่อน:substituteคำสั่ง ที่มีผลเหมือนกับการจัดกึ่งกลางบรรทัดปัจจุบันเป็นzzคำสั่งของคุณ


2

แต่น่าเสียดายที่ไม่ได้. วิธีปกติในการขอสิ่งนี้จะผ่าน

:autocmd CursorMoved * ...

แต่เหตุการณ์นั้นจะไม่ถูกเปิดขณะที่อยู่ใน:substitute///cลูปการสอบถาม คิดว่าเป็นโหมดพิเศษที่มีข้อ จำกัด มากมาย มันจะยากมากที่จะอนุญาตการทำงานที่กำหนดเองในขณะที่รักษาสถานะการค้นหาที่ถูกต้อง

คุณจะต้องปรับใช้:substituteฟังก์ชันการทำงานด้วยตัวเองอีกครั้ง บางทีคุณสามารถใช้ a :help sub-replace-expressionกับแบบสอบถามในนั้น ฉันยังไม่ได้ลองว่าการโต้ตอบกับผู้ใช้เป็นไปได้หรือไม่


1

ตามข้อเสนอแนะของ Ingo Karkat เพื่อใช้ตัวเลือก scrolloff ที่ฉันไปด้วย:

command! -nargs=1 CC set scrolloff=999|exec <f-args>|set scrolloff=0

ดังนั้นตอนนี้คุณสามารถเรียกใช้ "CC% s // c" และมันจะเคอร์เซอร์กึ่งกลางชั่วคราวในระหว่างคำสั่ง มันเป็นการดึงดูดที่จะหาตัวย่อหรือบางสิ่งบางอย่างสำหรับเรื่องนี้ แต่ฉันไม่สามารถคิดอะไรที่จะทำงานได้อย่างน่าเชื่อถือ

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