เป็นกลุ่ม - เลือกข้อความที่เน้นด้วยการค้นหา?


53

h/j/k/lในกลุ่มผมมักจะดำเนินการค้นหาที่จะกระโดดไปที่คำหรือวลีแทนการนำที่นั่นด้วย จากนั้นฉันก็ตีnเพื่อกระโดดระหว่างสิ่งต่าง ๆ

สมมติว่าฉันได้รับข้อความนี้:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

ฉันพิมพ์/an arrowและกด Enter nวลีที่เป็นไฮไลต์และผมข้ามไปด้วย

ตอนนี้ฉันต้องการเลือกข้อความนั้นอาจจะเปลี่ยนหรือลบ (ใช่ฉันรู้ถึง:sคำสั่งการแทนที่)

เนื่องจากเคอร์เซอร์ของฉันอยู่ที่ตัวอักษร "a" ที่จุดเริ่มต้นของ "ลูกศร" ฉันสามารถกดvได้แล้วกดeสองสามครั้งเพื่อเน้นทั้งวลี แต่ฉันมีความรู้สึกว่ามีวิธีที่สั้นกว่าและมีความหมายมากกว่า หลังจากทั้งหมดฉันได้ระบุข้อความที่ฉันสนใจ

ฉันจะเขียนคำสั่งเพื่อพูดว่า"เลือกการเลือกการค้นหาปัจจุบันได้อย่างไร"

คำตอบ:


38

คุณสามารถใช้gnในเวอร์ชัน 7.4 เป็นต้นไป (และgNเพื่อย้อนกลับ) มันมาแทนที่v//eเคล็ดลับ

ค้นหาไปข้างหน้าสำหรับรูปแบบการค้นหาที่ใช้ล่าสุดเช่น 'n' และเริ่มโหมด Visual เพื่อเลือกการจับคู่

ดู:help gnหรือVimcast นี้สำหรับข้อมูลเพิ่มเติม


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

2
ยินดีที่จะทำให้คำตอบดีขึ้น แต่ฉันไม่แน่ใจว่าจะช่วยได้หรือไม่ คำถามวางเป้าหมายอย่างเรียบร้อย ("เลือกผลการค้นหาถัดไป") และgnทำตามที่ถาม v//eส่งมันเป็นคำตอบที่แยกเป็นสัดส่วนเน้นว่ามันเป็นตัวแทนที่สมบูรณ์แบบสำหรับ ฉันเพิ่งแก้ไขคำตอบของฉันเพื่อเพิ่มเอกสารดีกว่าไหม?
David Lord

ขอบคุณมาก หากคุณต้องการความช่วยเหลือให้แน่ใจว่าได้ตรวจสอบเกี่ยวกับการท่องเที่ยวและศูนย์ช่วยเหลือ ยินดีต้อนรับสู่ Super User และเราหวังว่าคุณจะสนุกกับการเข้าพัก
bwDraco

1
Fantastic! ขอขอบคุณที่อัปเดตเธรดนี้ด้วยสิ่งล่าสุดและยิ่งใหญ่ที่สุด :)
นาธานลอง

29

ลองสิ่งนี้:

/an arrow
v//e

มันจะเข้าสู่โหมดแสดงภาพทำการค้นหาล่าสุดซ้ำและเลือกจนกระทั่งสิ้นสุด


1
จาก Vim 7.4 gnทำเช่นนี้ (โดยไม่เปลี่ยนความnหมาย)
smathy

8

ฉันพบว่าv//eตัวเองไม่เพียงพอเพราะหลังจากที่คุณออกจากโหมดภาพแล้วการข้ามไปที่ผลการค้นหาถัดไป / ก่อนหน้าทำให้เคอร์เซอร์อยู่ที่ท้ายผลลัพธ์แทนที่จะเป็นจุดเริ่มต้นตามปกติ

ในการแก้ไขปัญหานี้เราควรข้ามไปยังจุดสิ้นสุดของผลการค้นหา ( //e) จากนั้นเลือกภาพจนถึงจุดเริ่มต้น ( v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

ไชโย


สำหรับความสมมาตร: nnoremap g? ??b<cr>v//e<cr>(ทำสิ่งเดียวกัน แต่ค้นหาย้อนหลังแทนการส่งต่อ)
Kyle Strand

2

ขณะนี้มีปลั๊กอิน Vim-Search-Objectsที่ทำให้ Vim จัดการการค้นหาตรงกับวัตถุข้อความปกติดังนั้นคุณสามารถva/(เลือกภาพที่ตรงกัน) หลังจากที่คุณทำการค้นหา


1

วิธี "โง่" ในการทำแผนที่คีย์ (ในกรณีนี้คือ F5) เช่นด้านล่าง:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

หลังจาก/an arrowกด F5


+1ที่เลือกตัวละครตัวหนึ่งมากขึ้นเพราะจาก ละเว้นและมันจะเลือกเฉพาะส่วนที่ถูกค้นหา ในทางกลับกันnnoremap <F5> v//e<CR>ดูเหมือนว่าจะทำงานได้ดี
Dennis Williamson

@Dennis Williamson, +1 จำเป็นต้องเลือกสิ่งที่ถูกค้นหาอย่างแน่นอนหากคุณลบ +1 อักขระสุดท้ายจะไม่ถูกเลือกเนื่องจากไม่ได้เลือกอักขระที่เคอร์เซอร์อยู่ วิธีใด nnoremap <F5> v // e <CR> จะดีกว่ามาก
จอห์นนี่

มันเลือกตัวละครสำหรับฉัน หากฉันกดxหรือcหลังจากทำF5แต่ไม่+1รวมสตริงการค้นหาทั้งหมดรวมถึงอักขระที่อยู่ใต้เคอร์เซอร์จะถูกลบ
Dennis Williamson

@Dennis Williamson ฉันเพิ่งรู้ว่าตัวเลือก 'selection' ของฉันถูกตั้งค่าเป็น "เอกสิทธิ์" แต่ค่าเริ่มต้นคือ "รวม" นั่นเป็นสาเหตุที่ทำให้คุณไม่มี +1 (ดู: การเลือกความช่วยเหลือ)
จอห์นนี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.