ไฮไลต์ข้อความค้นหาโดยไม่เลื่อนเคอร์เซอร์


15

บางครั้งฉันใช้ Vim ฉันพบว่าตัวเองจ้องไปที่ส่วนหนึ่งของซอร์สโค้ดชั่วขณะหนึ่งและต้องการให้ตัวแปรบางอย่างบนหน้าจอโผล่ออกมา ง่ายมาก/<var>ซึ่งเน้นให้พวกเขาทั้งหมด ปัญหาของฉันคือบ่อยครั้งกว่าการค้นหาจะเลื่อนหน้าต่างของฉันดังนั้นฉันจึงไม่ได้ดูซอร์สโค้ดจากที่เดียวกัน แม้ว่ามันจะเลื่อนไปเพียงไม่กี่บรรทัด แต่ก็ยังคงส่งฉันออกไปเนื่องจากฉันต้องใช้เวลาสองสามวินาทีเพื่อหาว่าสิ่งต่าง ๆ ย้ายไปที่ใด

เป็นไปได้หรือไม่ที่จะเน้นข้อความค้นหาโดยไม่เลื่อนเคอร์เซอร์ไปที่การแข่งขันถัดไป


2
ไม่ใช่คำตอบที่แน่นอน แต่ฉันใช้ backticks สองตัว (``) เพื่อข้ามไปยังที่ที่ฉันเคยเป็นมาก่อน
Izkata

คำตอบ:


1

http://vim.wikia.com/wiki/VimTip1572

หากคุณใช้ปลั๊กอินนี้คุณสามารถเปิดใช้งานฟังก์ชั่นนี้ได้

\ เมตร

จากนั้นใช้ปุ่ม NumPad เพื่อกำหนดสีให้กับคำนั้นในทุกที่โดยไม่ต้องเลื่อนเคอร์เซอร์ของคุณ

1

คุณสามารถใช้ไฮไลท์ที่แตกต่างกันหลายครั้งพร้อมกันสำหรับคำที่แตกต่างกันหรือรูปแบบการค้นหาที่ซับซ้อนมากขึ้นหากคุณต้องการ


ฉันรักปลั๊กอินนี้!
แอนดรูวู้ด

15

คำตอบของ skyblueแสดงให้เห็นถึงหลักของแนวคิดของการใช้ไฮไลต์การค้นหาปกติเพื่อบรรลุสิ่งที่คุณต้องการ

ฉันขยายเทคนิคนั้นโดยการทำปุ่มลัดที่ทำงานคล้ายกับ*คำสั่งแต่ไม่ย้ายไปยังการแข่งขันถัดไปจริง ๆ

ฉันขอขอบคุณgaryjohn ที่ชี้ให้เห็นถึงการเลือกคำที่expand()เทียบเท่า*(เพื่อหลีกเลี่ยงการใช้*ตัวเองและเรียกคืนมุมมอง) สิ่งนี้ช่วยให้รหัสง่ายขึ้นพอที่จะสามารถไปในการแมปโดยตรง (obviates โดยใช้ฟังก์ชั่น) ฉันได้เพิ่มการแมปที่ตรงกับคำบางส่วน (เช่น g*)

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>

1
คุณสามารถหลีกเลี่ยงการโทรไป winsaveview () winrestview () และnormal *โดยการแทนที่ด้วยlet @/ = @/ let @/ = expand("<cword>")
garyjohn

@garyjohn: ใช่ดีกว่า ฉันไม่แน่ใจว่ามีบางสิ่งที่เทียบเท่ากับตัวเลือก "คำ" ที่ทำโดย*แต่<cword>มันคือ
Chris Johnsen

13

คุณสามารถตั้งค่าการค้นหาลงในตัวแปรที่คุณต้องการจับคู่ได้

ขั้นแรกตรวจสอบให้แน่ใจว่าเปิดการไฮไลต์ไว้ที่:

:set hlsearch

จากนั้นคุณสามารถตั้งค่าการค้นหาด้วย:

:let @/="variable"

สิ่งนี้จะเน้นการเกิดขึ้นของตัวแปรทั้งหมดโดยไม่กระโดดไปที่นัดต่อไป

สำหรับข้อมูลเพิ่มเติมดู :help @/


7

วิธีหนึ่งคือการใช้:matchคำสั่งเช่น

:match Question '^R^W'

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

:hi

^Rและ^Wมี Ctrl-R และ Ctrl-W ตามลำดับและจะถูกแทนที่ด้วยคำว่าภายใต้เคอร์เซอร์ ดู

:help c_CTRL-R_CTRL-W

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับที่ ดู

:help :match

สำหรับ:matchคำสั่งเพิ่มเติม หากต้องการล้างไฮไลต์นั้นเพียงดำเนินการ

:match

ไม่มีข้อโต้แย้ง



0

คล้ายกับ*เรา:

[I ............................. it show where the word under the cursor appears

:h [Iมันมีมูลค่ามีลักษณะที่ เราพบสิ่งที่น่าสนใจที่เกี่ยวข้องกับความต้องการของคุณ

มีคำถามที่คล้ายกันใน stackoverflow ที่ฉันใส่คำตอบของฉัน(อีกเล็กน้อยสมบูรณ์)

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