เป็นกลุ่มชัดเจนเน้นการค้นหาล่าสุด


1904

หลังจากค้นหาใน Vim ฉันได้รับเหตุการณ์ทั้งหมดที่ถูกไฮไลต์ ฉันจะปิดการใช้งานได้อย่างไร ตอนนี้ฉันทำการค้นหาสิ่งที่พูดพล่อยๆที่ไม่สามารถพบได้อีก

มีวิธีปิดการใช้งานไฮไลต์ชั่วคราวหรือไม่และเปิดใช้งานอีกครั้งเมื่อต้องการอีกครั้งหรือไม่


197
ฉันคิดว่าโซลูชัน "nnoremap <esc>: noh <return> <esc>" เป็นคำตอบที่สมบูรณ์ยิ่งขึ้นสำหรับคำถาม - โดยการใส่คำว่าใน. vimrc ของคุณคุณสามารถกด <esc> หลังจากที่คุณค้นหาเพื่อล้างการเน้น จากการค้นหาก่อนหน้า (แต่ไม่ปิดการใช้งานการเน้นที่ดี)
Stewart Johnson

5
: set invhlsearch จะปิดการใช้งานการไฮไลต์หากมีการไฮไลต์ไว้แล้วและเปิดใช้งานหากไม่อยู่ คุณสามารถแมปเพื่อพูด Shift-H
puffadder

1
@StartartJohnson ทำเช่นนั้นในไฟล์. vimrc ของฉันดูเหมือนว่าจะแทรกแซง / ทำลายด้วย: set mouse = a ความคิดใด ๆ ข้อผิดพลาดนี้เกิดขึ้นเฉพาะใน iTerm2
Charlie Parker

20
@StartartJohnson ระวัง! ความคิดเห็นที่ติดอันดับสูงสุดของคุณด้วยการทำแผนที่ทำให้เกิดข้อผิดพลาดและพฤติกรรมที่ไม่คาดคิดตามที่อธิบายไว้ในความคิดเห็นด้านล่างเพื่อstackoverflow.com/a/1037182/1698467
skywinder

3
nnoremap <esc> :noh<return><esc>วิธีการแก้ปัญหาที่แนะนำโดย @StewartJohnson ทำงานได้ดีใน GUI vim แต่ทำให้เกิดปัญหากับปุ่มลูกศรและคีย์อื่น ๆ ที่เข้ารหัส ESC เมื่อใช้ vim ในเทอร์มินัล อย่าใส่ไว้ในของคุณ ~/.vimrcโดยไม่ต้องห่อไว้ใน...if has('gui_running') end
jbyler

คำตอบ:


1587

หากต้องการปิดการไฮไลต์จนกระทั่งการค้นหาครั้งต่อไป:

:noh

หรือปิดการไฮไลต์อย่างสมบูรณ์:

set nohlsearch

หรือเพื่อสลับ:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

14
ด้วยการตั้งค่า nohlsearch การไฮไลต์จะส่งคืนเมื่อเริ่มต้นกลุ่มใหม่ :nohทำงานได้ดีขึ้น
Dharmit

21
มันน่ารำคาญที่สามารถค้นหาสตริงที่พูดพล่อยๆได้อย่างรวดเร็ว: / oajf3w9 ตามที่พิมพ์: noh ฉันชอบวิธีแก้ปัญหาของ @ avocade ในการทำแผนที่ปุ่ม space ไปที่:
noh

160
นี่ไม่ชัดเจนจากคำตอบและความคิดเห็นนี้: โปรดทราบว่าset nohlsearchจะปิดใช้งานการไฮไลต์สำหรับการค้นหาครั้งต่อไปเช่นกัน พฤติกรรมของ:nohแตกต่างกันมาก: การไฮไลต์จะเปิดใช้งานอีกครั้งโดยอัตโนมัติเมื่อคุณทำการค้นหาใหม่หรือแม้กระทั่งเมื่อคุณทำบางสิ่งที่เกี่ยวข้องกับการค้นหาปัจจุบัน (เช่นเมื่อคุณพิมพ์nเพื่อไปยังรายการถัดไป)
Skippy le Grand Gourou

10
ไม่มีคำอธิบายถึงสิ่งที่เกิดขึ้นจริงและผลที่ตามมา ขอบคุณ @SkippyleGrandGourou สำหรับการอธิบายบางอย่าง
Jason S

3
สำหรับสิ่งที่คุ้มค่าของผม map นี้'\/'(หรือสิ่งที่ผู้นำของคุณ):map <Leader>/ :nohlsearch<CR>
brianmearns

689

จากเอกสาร VIM

วิธีล้างรูปแบบการค้นหาที่ใช้ล่าสุด:

:let @/ = ""

สิ่งนี้จะไม่ตั้งค่ารูปแบบเป็นสตริงว่างเนื่องจากจะจับคู่กับทุกที่ รูปแบบถูกลบออกจริงๆเช่นเมื่อเริ่มต้นเป็นกลุ่ม


129
... ซึ่งจะเป็นทางออกที่ดีกว่าสำหรับปัญหาของเขาในขณะที่ฉันเข้าใจ
Shaun Bouckaert

8
นี่คือสิ่งที่ฉันกำลังมองหา! ฉันโหวตแล้วคำถามมันคลุมเครือเล็กน้อย นี่ทำให้ฉันคิดว่านี่คือสิ่งที่เขาต้องการ: "ตอนนี้ฉันค้นหาสิ่งที่พูดพล่อยๆที่ไม่สามารถหาได้อีก" เพราะนั่นคือสิ่งที่ฉันกำลังทำเพื่อล้างการค้นหา แต่ไม่ปิดการใช้งานดังนั้นการค้นหาครั้งต่อไปจะเน้นอีกครั้ง
claytron

50
นี่คือสิ่งที่ฉันคิดว่าเป็นคำถามเกี่ยวกับ ... นี่คือคำสั่งที่ฉันทำเพื่อล้างการค้นหาสตริง (และลบไฮไลท์ทั้งหมด): :command C let @/=""การใช้สิ่งนี้ช่วยให้คุณสามารถพิมพ์:Cเพื่อล้างสตริงการค้นหา ... อย่างรวดเร็วและ ไม่ส่งผลต่อการค้นหาหรือการเน้นในอนาคต
Jason

12
@ jcreamer898 โปรดดูวิธีใช้กลุ่ม "registers" ( :he registers) เป็นกลุ่มที่มีแตกต่างกันหลายตัวในการลงทะเบียนว่าข้อความไว้บางครั้งข้อมูลที่ดึงบางครั้งการค้นหาล่าสุด ฯลฯ เมื่อคุณค้นหาทำให้เป็นกลุ่มรูปแบบใน "/" @/ลงทะเบียนซึ่งคุณอ้างอิงใช้ นอกจากนี้คุณยังสามารถกำหนดค่าให้กับการลงทะเบียนโดยใช้@regname=valueที่regnameเป็นชื่อของการลงทะเบียน ดังนั้น@/=""เพียงแค่ตั้งค่า register "/" เป็นสตริงว่าง (ยกเว้นว่าในกลุ่ม "/" register vim จะล้างการค้นหาล่าสุดหากมีสตริงว่าง)
Ben Davis

3
เพิ่มสิ่งนี้ลงใน. vimrc ของคุณเพื่อรับ Ctrl + / เพื่อล้างการค้นหาล่าสุด: noremap <silent> <c-_> :let @/ = ""<CR>
angrydust

583

คุณทำได้

:noh

หรือ:nohlsearchเพื่อปิดใช้งานการไฮไลต์การค้นหาชั่วคราวจนกว่าการค้นหาถัดไป


3
ขอบคุณมันมีประโยชน์ ... คำสั่งใด ๆ สำหรับการกลับมาเน้น?
Gabriel Solomon

17
: nohs เพิ่งปิดการไฮไลต์ปัจจุบัน หากคุณมี: ตั้งค่า hlsearch ระบบจะไฮไลต์การค้นหาของคุณต่อไป
greyfade

6
ฉันคิดว่านี่เป็นสิ่งที่ OP กำลังค้นหา (แม้ว่าคำตอบของ Shaun ก็ใช้ได้เช่นกัน) ฉัน upvoting นี้สำหรับการที่สั้นลง ฉันรู้ว่าเขายอมรับคำตอบ nohls แต่การตั้งค่าจะปิดใช้งานการไฮไลต์การค้นหาทั้งหมดแม้ว่าจะลองค้นหาอีกครั้งในภายหลัง
Thiago Arrais

5
นี่อาจเป็นสิ่งที่ OP ต้องการในตอนแรกและเป็นคำตอบที่สั้นที่สุดและดีที่สุด IMHO

ความสมบูรณ์แบบสามารถบรรลุได้แม้ในอาณาจักรมรรตัยนี้! ฉันจะใช้สิ่งนี้มากกว่า: ช่วยและไม่ต้องการก่อให้เกิดมลพิษ <esc>: nnoremap <F1>: noh <CR>
Sam Watkins

305

ฉันพบคำตอบนี้เมื่อหลายปีก่อนบน vim.org:

เพิ่มสิ่งต่อไปนี้ใน. vimrc ของคุณ:

"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>

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


36
ผมคิดว่านี่เป็นมากวิธีการแก้ปัญหาที่ดีกว่าคนที่ได้รับการยอมรับจริง - คนใดคนหนึ่งหรือคนอื่น ๆ ที่เป็นแมปไป <ESC> แทน
Stewart Johnson

20
นี่เป็นคำตอบที่ดีกว่าสำหรับ "nnoremap <esc>: noh <return> <esc>" เพราะมันไม่ทำให้เกิดพฤติกรรมแปลก ๆ
Dennis

19
สิ่งสำคัญที่ควรทราบตรวจสอบให้แน่ใจว่าคุณไม่ได้ใส่ความคิดเห็นใด ๆ ทางด้านขวามือของการแมป พวกเขาจะถูกตีความว่าเป็นคำสั่งสำหรับการแมปเมื่อเทียบกับความคิดเห็น
codybuell

13
ความคิดเห็นนั้นผิด คำสั่งไม่ได้ยกเลิกการตั้งค่ารูปแบบการค้นหาล่าสุด แต่เพียงปิดการไฮไลต์ผลลัพธ์ปัจจุบัน คุณสามารถกดnเพื่อค้นหาเหตุการณ์ถัดไป (ซึ่งจะถูกเน้นอีกครั้ง) BTW :nohlsearchเมื่อสคริปต์ฉันจะหลีกเลี่ยงรูปแบบย่อและแทนที่จะเขียน
โทเบียส

28
เพิ่ม <silent> เพื่อหลีกเลี่ยงการกระพริบของจอแสดงผลและไม่ปล่อย noh ในบรรทัดคำสั่ง -: nnoremap <silent> <CR>: nohlsearch <CR> <CR>
Peter N Lewis

137

จากhttp://twitter.com/jonbho/status/2194406821

" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[

จำเป็นต้องใช้บรรทัดที่สองสำหรับการจับคู่กับกุญแจยกเว้นเนื่องจาก Vim ใช้การหลบหนีภายในเพื่อแสดงคีย์พิเศษ


12
เพื่อให้ชัดเจนขึ้นสิ่งนี้จะช่วยให้คุณสามารถล้างการไฮไลต์การค้นหาโดยกดปุ่ม Escape
Gavin Miller

7
ด้วยเหตุผลบางอย่างสิ่งนี้ทำให้เสียงเรียกเข้าเทอร์มินัลของฉันเริ่มต้นราวกับว่ากด "c" ความคิดใด ๆ
จาค็อบ

31
สิ่งนี้ทำให้เกิดพฤติกรรมแปลก ๆ บางอย่างเมื่อฉันลอง: เมื่อเริ่มต้นการเคลื่อนไหวเป็นกลุ่มแบบปกติ (เช่น j, k) จะทำให้บรรทัดถูกลบ nnoremap <CR>: noh <CR> <CR> ไม่ได้ทำให้เกิดปัญหาเหล่านี้ ฉันไม่สามารถติดตามสาเหตุที่แท้จริงได้
oasisbob

9
อืมฉันมีปัญหาเช่นเดียวกับที่กล่าวมาข้างต้น อย่าใช้สิ่งนี้ตามที่เป็นอยู่โดยไม่มีการทดสอบเว้นแต่ว่าคุณต้องการลบข้อความของคุณแบบสุ่ม ...
Derek Litz

8
การใช้ "nnoremap <esc>: noh <return> <esc>" ทำให้ vim เริ่มต้นเสมอในโหมด "REPLACEMENT"
user1850133

38

โซลูชันดั้งเดิมของฉัน (ด้านล่าง) สกปรกและสิ้นเปลือง ตอนนี้ฉันใช้:noh

เช่นเดียวกับฟีเจอร์มากมายใน Vim วิธีที่ถูกต้องมักจะไม่สามารถค้นพบได้ง่าย

-

(อย่าทำอย่างนี้)

ค้นหาลำดับตัวอักษรที่ไม่น่าจะเป็นไปได้ (บดปุ่มบนแถวโฮม):

/;alskdjf;

วิธีนี้ใช้งานได้เป็นกลุ่มและน้อยกว่าและง่ายกว่าที่จะจำ / พิมพ์ได้ง่ายกว่า @ ShaunBouckaert โซลูชันที่มีเหตุผลในการทำความสะอาด "เพื่อล้างรูปแบบการค้นหาที่ใช้ล่าสุด":

:let @/ = ""

ข้อเสียที่อาจเกิดขึ้นคือเพิ่มขยะในประวัติการค้นหาของคุณ


17
ไม่เพียง แต่เป็นโซลูชันที่สกปรก (ซึ่งฉันเองใช้จนถึงตอนนี้ไม่มีความผิด) และข้อเสียอีกอย่างคือมันเพิ่มแบนเนอร์สีแดงน่าเกลียดที่พูดว่า "ไม่พบรูปแบบ" ที่ด้านล่างของหน้าต่างซึ่งเกือบจะน่ารำคาญเท่ากับการเน้น ตัวเองและต้องการการดำเนินการเพิ่มเติมเพื่อยกเลิก (เช่น "search + backspace")
Skippy le Grand Gourou

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

5
นี่เป็นวิธีการแก้ปัญหาส่วนใหญ่ที่จะใช้ก่อนเรียนรู้เกี่ยวกับ:nohlคำสั่ง เมื่อฉันเรียนรู้เกี่ยวกับสิ่งหลังฉันหยุดค้นหาสิ่งเหล่านั้นทันที
โทเบียส

7
นี่ไม่ใช่คำตอบ ขอแนะนำให้ทำในสิ่งที่ OP ทำอยู่แล้ว: "ตอนนี้ฉันค้นหาสิ่งที่พูดพล่อยๆที่ไม่สามารถหาได้อีกแล้ว"
Reinstate Monica -

2
ถ้าคุณต้องการที่จะเข้าใจผิดและรูปแบบสั้น ๆ /$4เพียงแค่ใช้ ไม่เพียง แต่ไม่ตรงกับสิ่งใด แต่เป็นไปไม่ได้เลยจริงๆ $จะต้องตามด้วยการขึ้นบรรทัดใหม่หรือเป็นจุดสิ้นสุดของไฟล์และ 4 ไม่ใช่บรรทัดใหม่หรือจุดสิ้นสุดของไฟล์ (เหตุผลสำหรับ 4 โดยเฉพาะคือว่ามันอยู่บนคีย์เดียวกันดังนั้นมันจึงพิมพ์ได้อย่างรวดเร็วง่าย ๆ จริงๆ)
เซมิโคลอน

32

เชื่อมโยงกับไฟล์. vimrc.local ของฉันเร็วและสกปรก แต่ใช้งานได้ดีมาก:

" Clear last search highlighting
map <Space> :noh<cr>

32
nnoremap <cr> :noh<CR><CR>:<backspace>

วิธีที่ฉันกำจัด:nohแสดงใน commandline เมื่อกดปุ่มenterหลังจากการค้นหา

:ก็เหมือนกับเริ่มป้อนคำสั่งใหม่Backspaceล้างมันและทำให้โฟกัสกลับเข้าไปในหน้าต่างแก้ไข


6
ขอบคุณ. การ ": noh" ปรากฏขึ้นที่ด้านล่างซ้ายกำลังขับฉันบ้า OCD ไอ้บ้า
andrewtweber

ฉันพยายามแมปมันเพื่อเลื่อน cr โดยทำ nnoremap <S-cr>: noh <CR> <CR> แต่มันไม่ทำงานคุณรู้ไหมว่าทำไมมันถึงไม่ทำงาน?
Charlie Parker

ฉันสงสัยว่าคุณไม่สามารถรวมกะกับการกลับมาได้ แต่ฉันก็ไม่รู้จริงๆ
sjas

@CharlieParker IIRC คุณสามารถใช้ shift [a-z]และตัวอักษรดังกล่าวเท่านั้น
sjas

7
แทนการทำ:<Backspace>คุณก็สามารถเพิ่ม<silent>หลังจากที่nnoremapจะบอกเป็นกลุ่มที่จะไม่แสดงผลใด ๆ nnoremap <silent> <cr> :noh<CR><CR>ในพื้นที่คำสั่ง:
Soren Bjornstad

31

คำตอบที่เสนอ:nohหรือ:nohlsearch(เช่นของ Matt McMinn) นั้นถูกต้องสำหรับการปิดใช้งานการไฮไลต์การค้นหาชั่วคราว - ตามที่ถามในคำถามเดิม

ฉันคิดว่าฉันมีส่วนร่วมในการทำแผนที่ที่ฉันพบว่ามีประโยชน์ในโหมดปกติ:

nnoremap <C-L> :nohlsearch<CR><C-L>

โดยค่าเริ่มต้นCtrlLใน Vim จะลบและวาดหน้าจอใหม่ โปรแกรมบรรทัดคำสั่งจำนวนมาก (ส่วนใหญ่เป็นโปรแกรมที่ใช้ไลบรารี GNU Readlineเช่น Bash) ใช้คีย์ผสมเดียวกันเพื่อล้างหน้าจอ คุณสมบัตินี้มีประโยชน์ในสถานการณ์ที่กระบวนการที่ทำงานในพื้นหลังพิมพ์ไปยังเครื่องเทอร์มินัลโดยเขียนทับส่วนต่าง ๆ ของกระบวนการทำงานเบื้องหน้า

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

หมายเหตุ: noremapใช้มากกว่าmapเป็นอย่างอื่นการทำแผนที่จะซ้ำ

เคล็ดลับ:ฉันมักจะทำการแมปCaps Lockเพื่อCtrlให้ง่ายขึ้นในการพิมพ์คีย์ผสมเช่นนั้น รายละเอียดสำหรับการทำสิ่งนี้ขึ้นอยู่กับทางเลือกของระบบปฏิบัติการ / หน้าต่าง (และอยู่นอกหัวข้อสำหรับคำตอบนี้) ทั้งเคล็ดลับต่อไปรวมถึงข้อมูลเกี่ยวกับการทำแผนที่ Caps LockการCtrlเช่นเดียวกับEsc:


26

ฉันมักจะจับคู่:nohกับคีย์แบ็กสแลช หากต้องการเปิดใช้งานการnเน้นอีกครั้งเพียงกดปุ่มและจะเน้นอีกครั้ง


24

ปิดใช้งานการไฮไลต์การค้นหาอย่างถาวร

การจับคู่จะไม่ถูกเน้นเมื่อใดก็ตามที่คุณทำการค้นหาโดยใช้ /

:set nohlsearch

ล้างไฮไลต์จนกว่าจะค้นหาต่อไป

:noh

หรือ:nohlsearch(ล้างจนกว่าnหรือNกด)


ล้างไฮไลต์เมื่อกด ESC

nnoremap <esc> :noh<return><esc>

ล้างไฮไลต์เมื่อกดปุ่มอื่นหรือแผนที่ที่กำหนดเอง

  • ล้างไฮไลต์เมื่อกด\(แบ็กสแลช)

    nnoremap \ :noh<return>
    
  • ล้างไฮไลต์บนการกดปุ่มESCสองครั้ง

    nnoremap <esc><esc> :noh<return>
    

2
การnnoremap <silent> <esc> :noh<return><esc>แก้ปัญหาทำงานได้ดีใน GUI vim แต่ทำให้เกิดปัญหารุนแรงกับปุ่มลูกศรและคีย์อื่น ๆ ที่เข้ารหัส ESC เมื่อใช้ vim ในเทอร์มินัล อย่าใส่ไว้ในของคุณ ~/.vimrcโดยไม่ต้องห่อไว้ใน...if has('gui_running') endลองพิจารณาเพิ่มคำสั่ง<silent>ที่หลีกเลี่ยงการกะพริบ:nohคำสั่งในแถบสถานะ
jbyler

17

นี่คือสิ่งที่ฉันใช้ (แยกจากคำถาม / คำตอบต่าง ๆ มากมาย):

nnoremap <silent> <Esc><Esc> :let @/=""<CR>

ด้วย "double" Escคุณจะลบการไฮไลต์ แต่ทันทีที่คุณค้นหาอีกครั้งการไฮไลต์จะปรากฏขึ้นอีกครั้ง


ทางเลือกอื่น:

nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>

ตามเอกสารที่เป็นกลุ่ม:

clearmatches ()

    Clears all matches previously defined by |matchadd()| and the

    |:match| commands.

ฉันประสบข้อบกพร่องบางอย่างในการแก้ปัญหาด้านบนดังนั้นเพื่อประหยัดเวลาของคุณลองตอบคำถามทั้งหมด ใช้วิธีนี้! แก้ไขของคุณ.vimrcและใส่รายการต่อไปนี้ในมัน:nnoremap <silent> <Esc><Esc> :let @/=""<CR>
user1336087

แต่นั่นคือสิ่งที่มันบอกว่า Oo บางทีคุณสามารถโหวตได้
Pablo Olmos de Aguilera C.

ฉันสนับสนุนโซลูชันของคุณ ... มันเป็น IMO ที่ดีที่สุด ... และฉันได้
อัปเกรด

1
การล้างข้อมูลรีจิสเตอร์การค้นหา@/=""มีผลข้างเคียงจากการทำให้nไม่สามารถกลับมาค้นหาได้ ฉันชอบ:nohที่จะทำการค้นหาก่อนหน้านี้ในการลงทะเบียนเพื่อนำมาใช้ซ้ำ
jbyler



8

Janus สำหรับ VIM และ GVIMมีสิ่งต่าง ๆ ที่น่าสนใจสำหรับมือใหม่เช่นฉันรวมถึง

<leader>hs - toggles highlight search

ซึ่งเป็นสิ่งที่คุณต้องการ เพียงพิมพ์\hsในโหมดปกติ (รหัสผู้นำจะถูกแมปไป\ตามค่าเริ่มต้น)

HTH


7

มีปลั๊กอิน 'ต้องมี' สองอันสำหรับสิ่งนี้:

  1. เหมาะสม - Ctrl-lสำหรับหน้าจอ nohlsearch และ redraw
  2. unimpared - [oh, ]ohและcohการควบคุม hlsearch

ไม่บอบช้ำเปลี่ยนแปลงcoไปyoใน v2 yohจึงเป็น ดูgithub.com/tpope/vim-unimpaired/blob/v2.0/doc/unimpaired.txtและgithub.com/tpope/vim-unimpaired/issues/150
myrdd

cohยังคงใช้งานได้แม้ว่าจะมีข้อความแนะนำให้ใช้yohถ้าคุณใช้coh
avinashkrsharma

7

ปิดการไฮไลต์ทันทีที่คุณเลื่อนเคอร์เซอร์:

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


6

วิธีนี้จะล้างไฮไลต์การค้นหาหลังจากupdatetimeไม่มีการใช้งานเป็นมิลลิวินาที

updatetimeค่าเริ่มต้นเป็น 4000ms หรือ 4s แต่ฉันตั้งค่าของฉันเป็น 10 วินาที เป็นสิ่งสำคัญที่จะต้องทราบว่าupdatetimeทำได้มากกว่านี้ดังนั้นโปรดอ่านเอกสารก่อนที่จะทำการเปลี่ยนแปลง

function! SearchHlClear()
    let @/ = ''
endfunction
augroup searchhighlight
    autocmd!
    autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END

6

หากคุณต้องการเปิดใช้งาน / ปิดใช้งานการไฮไลต์อย่างรวดเร็วคุณสามารถแมปรหัสไปที่

" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>

เพียงวางตัวอย่างข้างบนไว้ในไฟล์. vimrc ของคุณ

นั่นเป็นวิธีที่สะดวกที่สุดในการแสดงและซ่อนไฮไลต์การค้นหาด้วยการกดปุ่มร้องเพลง

สำหรับข้อมูลเพิ่มเติมตรวจสอบเอกสารประกอบhttp://vim.wikia.com/wiki/Highlight_all_search_pattern_matches


5

อีกหนึ่งคำตอบโดยการรวม 2 คำตอบยอดนิยม:

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>

การล้างข้อมูลรีจิสเตอร์การค้นหา@/=""มีผลข้างเคียงจากการทำให้nไม่สามารถกลับมาค้นหาได้ ฉันชอบ:nohที่จะทำการค้นหาก่อนหน้านี้ในการลงทะเบียนเพื่อนำมาใช้ซ้ำ คุณสามารถผูก<F3>กับที่nnoremap <F3> :noh<CR>
jbyler

5

ฉันคนชอบแผนที่escเพื่อคำสั่ง:nohดังต่อไปนี้:

map <esc> :noh<cr>

ฉันเขียนบทความทั้งหมดเกี่ยวกับการค้นหา Vim : วิธีการค้นหาบน Vanilla Vim และปลั๊กอินที่ดีที่สุดเพื่อปรับปรุงคุณสมบัติการค้นหา



4

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

คำแนะนำหลายประการที่ฉันพบเพื่อเพิ่มnnoremap ...~ / .vimrc มีผลที่นี่ในการใส่ vim เข้าสู่โหมดแทนที่เมื่อเริ่มต้นซึ่งไม่ได้เป็นอย่างที่ฉันต้องการ ทางออกที่ง่ายที่สุดที่ฉันพบคือเพิ่มบรรทัด

nmap <esc><esc> :noh<return>

ถึง ~ / .vimrc ของฉัน สิ่งนี้ทำให้หลักการของ KISS นั้นไม่ยุ่งเกี่ยวกับปุ่มลูกศรซึ่งใช้ <esc> อันเดียว จำเป็นต้องใช้ double- <esc> ในโหมดคำสั่ง (หรือสาม - <esc> จากการแทรกหรือเปลี่ยนโหมด) เพื่อล้างการไฮไลต์จากการค้นหาก่อนหน้า แต่จากมุมมอง UI สิ่งนี้ทำให้การดำเนินการง่ายที่สุดเท่าที่จะทำได้


คุณหมายถึงอะไรโดย <esc> เดี่ยวที่รบกวนกับปุ่มลูกศร
hansmosh

1
@hansmosh ดูunix.stackexchange.com/questions/28713/… ฉันใช้สองบรรทัดใน. vimrc ของฉันดังนี้ nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
Lindsay Haisley

4

ฉันใช้สิ่งต่อไปนี้ในของฉัน ~/.vimrc

nnoremap <Leader><space> :noh<Enter>

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


3

ฉันคิดว่าการผสม @ShaunBouckaert และ 19 มีนาคม 09 เวลา 16:22 คำตอบคือการประนีประนอมที่ดี:

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

กดEnterและข้อความที่ไฮไลต์จะไม่ถูกเน้นอีกต่อไปในขณะที่การไฮไลต์การค้นหายังคงเปิดใช้งานอยู่


3

คุณสามารถใช้: noremapเพื่อเปิด / ปิดสำหรับผลการค้นหาเช่นนี้

:noremap <F3> :set hls! hls?<CR>


3

จาก @ baruch-even answer คุณสามารถลบคำค้นหาโดยการESCกดสองครั้งขณะที่อยู่ในโหมดปกติด้วย:

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[

ฉันคิดว่าการโยงครั้งที่สองก็โอเค แต่อันแรกนั้นอันตราย การแมปใหม่<esc>ทำงานได้ดีใน GUI vim แต่ทำให้เกิดปัญหารุนแรงกับปุ่มลูกศรและคีย์อื่น ๆ ที่เข้ารหัส ESC เมื่อใช้ vim ในเทอร์มินัล อย่าใส่ไว้ในของคุณ ~/.vimrcโดยไม่ต้องห่อไว้ใน...if has('gui_running') endลองพิจารณาเพิ่มคำสั่ง<silent>ที่หลีกเลี่ยงการกะพริบ:nohคำสั่งในแถบสถานะ
jbyler

1

ฉันไม่ชอบมันเช่นกัน ฉันพบว่ามันน่าเบื่อที่จะใส่:nohlตลอดเวลา ... ดังนั้นฉันจึงใส่แผนที่ต่อไปนี้ใน.vimrc

noremap <C-_> :nohl<cr>:<backspace>

บิตแรก ( :nohl<cr>) ล้างไฮไลต์ บิตที่สอง ( :<backspace>) เป็นเคล็ดลับในการทำความสะอาดบรรทัดคำสั่ง การค้นหายังคงอยู่ในพื้นหลังดังนั้นหากคุณกดปุ่มnมันจะเป็นการไฮไลต์อีกครั้งและนำคุณไปสู่การเกิดขึ้นครั้งต่อไป


1

ฉันเพิ่มสิ่งนี้ไปยังvimrcไฟล์ ของฉัน

command! H let @/=""

หลังจากคุณทำการค้นหาและต้องการล้างไฮไลต์จากการค้นหาของคุณให้ทำ :H


1

คุณสามารถเพิ่มการแมปบนไฟล์. vimrc ของคุณได้เช่น

nmap <C-N>: nohlsearch

จากนั้นคุณสามารถกด

Ctrl + N

เป็นทุกเวลาเพื่อล้างข้อความที่เน้นสี


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